Java Junit-无法从中的std读取
当我尝试运行我的单元测试,例如添加Java Junit-无法从中的std读取,java,junit,Java,Junit,当我尝试运行我的单元测试,例如添加System.in.read()并通过Intellij运行它们时,我通常可以键入的控制台不接受任何输入。。。好像Junit以某种方式重定向stdin。。。我基本上希望测试等待我的按键-是否有其他方法来执行此操作或重置stdin 单元测试应该是自动化的。这意味着没有用户干预,因此您不应该要求用户在控制台中键入测试内容 如果您需要测试从System.in读取控制台输入的代码,那么您的测试应该临时用其他内容替换System.in System.setIn( myInp
System.in.read()
并通过Intellij运行它们时,我通常可以键入的控制台不接受任何输入。。。好像Junit以某种方式重定向stdin。。。我基本上希望测试等待我的按键-是否有其他方法来执行此操作或重置stdin 单元测试应该是自动化的。这意味着没有用户干预,因此您不应该要求用户在控制台中键入测试内容
如果您需要测试从System.in
读取控制台输入的代码,那么您的测试应该临时用其他内容替换System.in
System.setIn( myInputStream);
只要确保你做完后把它放回去就行了。最好在之前的@中执行此操作,然后在
之后的@中执行此操作,如下所示:
private InputStream oldIn = null;
@Before
public void replaceStdIn(){
//save reference to console STDIN so we can put it back later
oldIn = System.in;
}
@After
public void restoreStdIn(){
System.setIn(oldIn);
}
@Test
public void testConsoleInput(){
InputStream mockStdIn = ...
System.setIn(mockStdIn);
//now do your test as usual
}
我已经使用Junit的规则
来创建我自己的规则
,在需要时自动为所有系统流执行此操作