JUnit:如何模拟System.in测试?
我有一个Java命令行程序。我想创建JUnit测试用例以进行模拟System.in
。因为当我的程序运行时,它将进入while循环并等待用户输入。如何在JUnit中模拟呢?
回答:
从技术上讲,可以进行切换System.in
,但是总的来说,不直接在代码中调用它,而是添加一层间接层,这样输入源就可以从应用程序的某个位置进行控制,这样会更健壮。确切地讲,这是实现的详细信息-依赖项注入的建议很好,但是你不一定需要引入第三方框架。例如,你可以从调用代码传递I / O上下文。
如何切换System.in
:
String data = "Hello, World!\r\n";InputStream stdin = System.in;
try {
System.setIn(new ByteArrayInputStream(data.getBytes()));
Scanner scanner = new Scanner(System.in);
System.out.println(scanner.nextLine());
} finally {
System.setIn(stdin);
}
以上是 JUnit:如何模拟System.in测试? 的全部内容, 来源链接: utcz.com/qa/419646.html