【问题标题】:JUnit Testing Console Input ApplicationJUnit 测试控制台输入应用程序
【发布时间】:2019-08-17 09:22:47
【问题描述】:

我正在尝试使用 JUnit 来测试一个 Java 应用程序,该应用程序从控制台获取输入以在程序中做出选择。这是我在下面尝试测试的程序的 sn-p。

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' 但输入是从控制台给出的?

【问题讨论】:

  • 那么你的问题是什么?
  • 刚刚添加。希望它足够清楚
  • 这是一个相当广泛的问题。也许太宽泛而无法得到一个好的答案。您应该阅读有关依赖注入、mockito 以及为什么依赖注入对单元测试很重要的信息。如果您对具体示例有更具体的问题,请再回来。

标签: java junit4 console-input


【解决方案1】:

如果您从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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      相关资源
      最近更新 更多