如何在Junit控制台中接受用户输入

5

我正在尝试为下面给出的函数编写Junit测试用例:

class A{
  int i;
  void set()
  {
    Scanner in=new Scanner(System.in);
    i=in.nextInt();
  }
}

现在我的问题是,当我为它创建一个Junit测试用例时,它不接受用户的输入:
 public void testSet() throws FileNotFoundException {
    System.out.println("set");
    A instance = new A();
    int i=1;
    instance.set(i);
    // TODO review the generated test code and remove the default call to fail.
    //fail("The test case is a prototype.");
}

请建议我如何接受用户的输入。

2
在 JUnit 测试中,您不需要从用户那里获取输入。如果您需要使用某些 InputStream 进行测试,请将其附加到您的 OutputStream 并通过编程方式提供输入。 - Victor Sorokin
实际上,您应该设计您的代码,使得任何测试代码都不需要从 System.in 读取,而是从传入的 InputStream 或类似的对象中读取。 - Louis Wasserman
1
我知道,但那是我的要求...没有办法让用户输入并使用Junit测试该方法吗? - user1778824
使用JUnit的目的是进行自动化测试。在我看来,你试图实现的目标与此相违背。你应该创建一些测试夹具。 - Bhesh Gurung
但我确实需要测试一个从用户那里输入的方法...难道没有办法可以做到吗? - user1778824
显示剩余3条评论
1个回答

7
您可以使用 System.setIn() 来模拟用户输入:
String inputData = "user input data";
System.setIn(new java.io.ByteArrayInputStream(inputData.getBytes()));

现在,如果您调用set()方法,它将从您的字符串中读取数据,而不是从标准输入中读取。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接