一尘不染

JUnit:如何模拟System.in测试?

java

我有一个Java命令行程序。我想创建JUnit测试用例以进行模拟System.in。因为当我的程序运行时,它将进入while循环并等待用户输入。如何在JUnit中模拟呢?


阅读 539

收藏
2020-03-19

共1个答案

一尘不染

从技术上讲,可以进行切换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);
}
2020-03-19