1

我正在尝试编写一个将重定向stdout主方法的测试,但似乎一旦我调用主方法,它似乎开始在另一个线程上,我无法捕获输出。这是代码:

这有效:

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(_)当我不重定向时,运行甚至不会在控制台中列出任何内容。这是什么原因造成的?

4

1 回答 1

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>
于 2013-05-05T02:56:36.343 回答