我使用了TextFromStandardInputStream和JUnit Test Case,它运行正常。但是现在我想根据我的要求在Test Cases外面模拟StandardInputStream。我在测试用例之外使用了相同的TextFromStandardInputStream,但它根本不起作用。那么,有没有办法完成这项工作?
带有我使用过的测试用例的StandardInputStream示例
@Rule
public final TextFromStandardInputStream systemInMock = emptyStandardInputStream();
内部测试案例:
systemInMock.provideLines("1","2");
答案 0 :(得分:1)
您可以使用System.setIn()
将系统设置为模拟,假设您已存根输入流:
System.setIn(systemInMock);
这适用于普通输入流:
System.setIn(new ByteArrayInputStream("yes".getBytes()));
System.out.println(System.in.read());// outputs 121
同样,如果在将System.in
设置为模拟值之前将其存储在变量中,则可以重置它。
答案 1 :(得分:-1)
您可以使用Aspect Oriented Programming
拦截System.in
并进行模拟,而不是调用真实System.in
。 AspectJ
或Spring AOP
可能是一个起点。