JUnit测试控制台输入应用程序

时间:2019-03-26 21:34:18

标签: java junit4 console-input

我正在尝试使用JUnit测试Java应用程序,该应用程序从控制台获取输入以在程序中进行选择。这是我要在下面测试的程序的一个片段。

PS:我是JUnit测试的新手,因此希望获得一个清晰,简单的答案。

public void mainMenu(){
   String input;
   while (true){
      System.out.println("1. view     2. Set-Up     3. Exit");
            input = getInputFromConsole().trim();

            switch (input.charAt(0)) {
               case '1':
                  view();
                  break;
               case '2':
                  setUp();
                  break;
               case '3':
                  System.exit(0);
                  break;
   }
}

我将如何创建一个测试用例,其中的输入为'1',但是输入是从控制台输入的?

2 个答案:

答案 0 :(得分:2)

如果您从System.in获得输入,则可以使用System.setIn()方法进行更改以进行测试。

缺少您的详细信息,这是一个草图示例:

@Test
public void takeUserInput() {
    InputStream in = new ByteArrayInputStream("1".getBytes());
    System.setIn(in);
    // instantiate and exercise your object under test
    // assert something meaningful
}

但是,一般而言,我建议抽象化从用户那里获取输入信息的细节。例如,通过引入一些UserInput接口。然后,您可以将其注入到要测试的类中。这将有助于拥有任何输入提供程序:控制台,Web,数据库等。在适当的界面上,您将可以存根任何用户输入。存根的好库是Mockito

答案 1 :(得分:0)

您可以使用System.in来读取标准输入(可能是您的“控制台”)