2013-05-05 182 views
1

我想写一个测试,将重定向的主要方法stdout,但似乎一旦我调用主,它似乎开始在另一个线程,我无法捕获输出。下面是代码:重定向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(_)甚至没有列出任何控制台时,我不重定向。这是什么造成的?

回答

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> 
+0

正如我所编辑,'Console.setOut'没有工作,但是,'Console.withOut'工作 – 2013-05-05 02:59:02

+0

右键,在第二个帐户,也有一次,我使用main(null)而不是main(_)调用,然后运行,我猜我曾以为这会采取类似行动,因为我不使用参数...我将不得不进一步了解这一点:)非常感谢! – 2013-05-05 03:01:18