【发布时间】:2015-06-08 12:21:03
【问题描述】:
我正在为练习中创建的程序编写 JUnit。这意味着测试需要覆盖尽可能多的情况,我对程序中某些事情的实现方式没有任何影响。此外,该程序运行一个无限循环,在某一时刻,它需要用户输入一些内容。
对于 JUnit 测试,我在另一个 Thread 中运行程序,并在 JUnit Thread 中模拟用户输入。
到目前为止,如果程序从System.in 读取用户输入,一切正常,因为这个流很容易被替换。但也有可能程序与System.console() 交互,目前我的测试无法涵盖。
是否有可能模拟System.console() 的输入,例如通过用另一个流替换其输入源?
(注意:JUnit 测试必须使用 Java 6,而不需要任何外部库(JUnit 和 Hamcrest 除外)。)
编辑:很遗憾,我无法更改要测试的程序的类。
【问题讨论】:
-
你的类的构造函数必须接受一个
Console对象,所以你可以注入它。然后在测试中你必须构造一个Console的mock 实例,你必须将它传递给构造函数。 -
@SvetlinZarev 看到我的编辑。没有别的办法吗?