println
ステートメントを介して出力を標準出力にテストできるようにするScalatestには何かがありますか?Scalatest - printlnのテスト方法
これまでは、主にFunSuite with ShouldMatchers
を使用していました。
どのように我々は
object Hi {
def hello() {
println("hello world")
}
}
println
ステートメントを介して出力を標準出力にテストできるようにするScalatestには何かがありますか?Scalatest - printlnのテスト方法
これまでは、主にFunSuite with ShouldMatchers
を使用していました。
どのように我々は
object Hi {
def hello() {
println("hello world")
}
}
の印刷出力をチェックしますかコンソールにprint文をテストするための通常の方法は、あなたがそれらのステートメントを傍受できるように、少し異なるプログラムを構築することです。あなたは、例えばOutput
形質を導入することができます:printlnのはConsole.setOutを使用してへの書き込み場所を置き換えることができ
trait MockOutput extends Output {
var messages: Seq[String] = Seq()
override def print(s: String) = messages = messages :+ s
}
val hi = new Hi with MockOutput
hi.hello()
hi.messages should contain("hello world")
:
trait Output {
def print(s: String) = Console.println(s)
}
class Hi extends Output {
def hello() = print("hello world")
}
そして、あなたはMockOutput
実際に傍受通話別の形質を定義することができ、あなたのテストで
val stream = new java.io.ByteArrayOutputStream()
Console.setOut(stream)
println("Hello world")
Console.err.println(stream.toByteArray)
Console.err.println(stream.toString)
任意のタイプのストリームを使用できます。あなたは、あなただけの限られた期間のためのコンソール出力をリダイレクトしたい場合は、
Console.setErr(PrintStream)
Console.setIn(PrintStream)
'Console。{setErr、setIn、setOut}'は2.11.0から廃止されました(この回答が提出されてから3年後)。 –
新しいメソッドはConsoleです。{withOut、withIn、withErr} – Zee
と標準エラー出力と標準入力のためのものと同じ種類の操作を行うConsole
に定義されたwithOut
とwithErr
メソッドを使用することができます :
val stream = new java.io.ByteArrayOutputStream()
Console.withOut(stream) {
//all printlns in this block will be redirected
println("Fly me to the moon, let me play among the stars")
}
MockOutputに 'override'を追加する必要があります –
私はこの解決策が大好きです。@Ericは' Output'を拡張することなくこれを行う方法があります。私は、その形質が最初に必要でない、形質を「延長する」と感じている、ハックである。この特性が既に必要であり、我々がテストインプラントを作成していればそれは意味をなさないでしょう。 –
形質を広げるのを避ける唯一の方法は、ケヴィンやマティューがアドバイスしていることをすることです。つまり、私はあなたのソフトウェアをテスト可能なように構築するという哲学が、優れた設計上の決定だと考えています。その考えを追求するときには、すべてのIO /外部システムの相互作用のための特性を導入することに至ります。 – Eric