0

我正在尝试使用 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' 但输入是从控制台给出的?

4

2 回答 2

3

如果您从 获得输入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、DB 等。有了适当的接口,您将能够存根任何用户输入。存根的好库是 Mockito

于 2019-03-26T22:22:05.943 回答
0

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

于 2019-03-26T22:16:47.837 回答