我正在尝试编写一个将重定向main方法的stdout
的测试,但似乎一旦我调用main,它似乎从另一个线程开始,我无法捕获输出。这是代码:
这有效:
val baos = new ByteArrayOutputStream
val ps = new PrintStream(baos)
System.setOut(ps)
print("123")
Assert.assertEquals("123", baos.toString)
这不是:
val baos = new ByteArrayOutputStream
val ps = new PrintStream(baos)
System.setOut(ps)
GameRunner.main(_)
Assert.assertEquals("123", baos.toString)
...
object GameRunner {
def main(args: Array[String]) {
print("123")
如何在测试中接听print
的电话?
*我也试过scala.Console.setOut
修改
我注意到当我没有重定向时,运行GameRunner.main(_)
甚至没有在控制台中列出任何内容。造成这种情况的原因是什么?
答案 0 :(得分:2)
print
真是Predef.print
,会调用Console.print
。即使您致电System.setOut
,我也不知道这是否会对Console.print
产生影响。尝试拨打Console.setOut
或尝试:
Console.withOut(ps)(GameRunner.main(null))
另一种可能性是通过调用GameRunner.main(_)你没有执行任何操作(因为它可能只是返回函数(args: Array[String]) => GameRunner.main(args)
?。应该快速排除它。
编辑是的:
scala> object A { def main(args: Array[String]) { println("1") } }
defined module A
scala> A.main(null)
1
scala> A.main(_)
res1: Array[String] => Unit = <function1>