我有一个 Java 命令行程序。我想创建 JUnit 测试用例来模拟 System.in
。因为当我的程序运行时,它会进入 while 循环并等待用户输入。如何在 JUnit 中进行模拟?
谢谢
最佳答案
在技术上可以切换System.in
,但一般来说,不直接在代码中调用它会更健壮,而是添加一个间接层以便控制输入源从您的应用程序中的某一点开始。究竟如何做到这一点是一个实现细节——依赖注入(inject)的建议很好,但你不一定需要引入 3rd 方框架;例如,您可以从调用代码中传递一个 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);
}
关于java - JUnit:如何模拟 System.in 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1647907/