dar*_*ser 4 java junit java-io
我正在为在练习中创建的程序编写JUnit。这意味着测试需要涵盖尽可能多的情况,而我对程序中某些内容的实现方式没有任何影响。此外,该程序还会运行一个无限循环,在该循环中,在某一点上它需要用户输入一些内容。
对于JUnit测试,我在另一个程序中运行该程序,Thread并在JUnit中模拟用户输入Thread。
到目前为止,如果程序从中读取用户输入,则一切正常System.in,因为此流可以轻松替换。但是也存在程序交互的可能性,System.console()当前我的测试无法涵盖。
是否有可能模拟的输入System.console(),例如通过用另一个流替换其输入源?
(注意:JUnit测试必须使用Java 6且没有任何外部库(JUnit和Hamcrest除外)。)
编辑:不幸的是,我无法更改要测试的程序的类。
查看JDK源代码后,我发现Console该类正在从标准输入(System.in)中读取数据:
reader = new LineReader(StreamDecoder.forInputStreamReader(new FileInputStream(FileDescriptor.in), readLock, cs));
Run Code Online (Sandbox Code Playgroud)
哪里FileDescriptor.in是指向实际标准输入(public static final FileDescriptor in = standardStream(0);)的常量。因此,即使您System.in使用System.setIn()控制台类替代,仍将使用实际的标准输入。
唯一的选择是Console用模拟代替对象。
| 归档时间: |
|
| 查看次数: |
1518 次 |
| 最近记录: |