java - 如何在 Java 中模拟 System.in(除了在 Junit 测试用例中使用)?

标签 java mocking inputstream

我已将 TextFromStandardInputStream 与 JUnit 测试用例一起使用,效果很好。但现在我想在测试用例之外模拟 StandardInputStream 以满足我的要求。我在测试用例之外使用了相同的 TextFromStandardInputStream 但它根本不起作用。那么,有什么办法可以完成已完成的工作吗?

Sample of StandardInputStream with Test Case that I have used

@Rule
public final TextFromStandardInputStream systemInMock = emptyStandardInputStream();

内部测试用例:

systemInMock.provideLines("1","2");

最佳答案

假设您已经对输入流进行了 stub 处理,您可以使用 System.setIn() 将系统设置到您的模拟中:

System.setIn(systemInMock);

这适用于普通输入流:

System.setIn(new ByteArrayInputStream("yes".getBytes()));
System.out.println(System.in.read());// outputs 121

同样,如果在将 System.in 设置为模拟值之前将其存储在变量中,则可以重置它。

关于java - 如何在 Java 中模拟 System.in(除了在 Junit 测试用例中使用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49022345/

相关文章:

java - 用java发送邮件

java - 有权限无法写入SD卡

java - 搜索字符串的 ArrayList 以查找文本

python - 如何在 Python 中模拟 SendGrid 方法

unit-testing - 梅克和测试驱动开发工作流程?

java - stub 类仍然像通常调用的那样运行

java - 如何在与 Selenium 相同的选项卡中打开新 URL,但以某种方式编辑 URL?

java - 如何将方法作为参数传递

java - 从输入流中获取文件名 (Java)

java - 输入流和内存不足错误