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

标签 java command-line junit

我有一个 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/

相关文章:

linux - 复杂的 shell 通配符

java - 从命令行 Java 应用程序上传到 Google App Engine 中的 BlobStore

eclipse - 在 Eclipse 中更改默认的 TestRunner

android - 使用 ServiceTestCase 访问 JUnit 的资源

java - 如果列包含 NULL 单元格,GWT CellTable 无法正确排序

java - 如何在java SE中获取接入点/路由器的本地IP

java - 使用 Jersey Test、Grizzly 和 HK2 依赖注入(inject)进行功能测试

matlab - 确定 Matlab 是否有可用的显示

java - 使用 JUnit 测试异常。即使异常被捕获,测试也会失败

java - Java 8 是否提供了一种重复值或函数的好方法?