我有一个Java命令行程序。我想创建JUnit测试用例以进行模拟System.in。因为当我的程序运行时,它将进入while循环并等待用户输入。如何在JUnit中模拟呢?
System.in
从技术上讲,可以进行切换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); }