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

回到顶部