我被要求在从命令行运行和操作的遗留 Java 应用程序中引入单元测试。基本上,主循环打印出一个菜单,用户输入一些内容并显示更多数据。
这个 Main 类说明了应用程序是如何工作的。
public class Main{
static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
public static void main(String argv[]) throws IOException{
while (true) {
char input = (char) reader.read();
if(input == 'x'){
return;
}
System.out.println(input);
}
}
}
我希望我的测试方法看起来像这样
public void testCaseOne(){
Main.main();
String result = "";
result = sendInput("1");
assertEqual(result, "1");
result = sendInput("x");
assertEqual(result,"");
}
我知道System.setOut()
andSystem.setIn()
方法,但我无法找到使该System.setIn()
方法在这种情况下工作的方法,因为该reader.read()
方法阻塞了我的线程。
我的测试设计错了吗?有没有办法设计sendInput()
通过阻塞 reader.read() 调用工作的方法?