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的
规则
来创建我自己的
规则
,在需要时自动为所有系统流执行此操作