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

Java JUnit测试控制台输入应用程序,java,junit4,console-input,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 = getInputFromCons

我试图使用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”,但输入是从控制台提供的?

您可以使用
系统。在
中,您可以使用
系统读取标准输入(可能是您的“控制台”)

中,您可以使用
系统读取标准输入(可能是您的“控制台”)

如果您从
系统获得输入,然后,对于测试,您可以使用方法更改它

由于缺乏具体细节,以下是一个草图示例:

@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等。有了适当的接口,您将能够存根任何用户输入。用于存根的好库是。

如果您从
系统中获得输入。在
中,为了进行测试,您可以使用方法更改它

由于缺乏具体细节,以下是一个草图示例:

@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以及为什么依赖项注入对单元测试很重要。如果您有更具体的问题和具体的例子,请回来。那么您的问题是什么?只是添加了它。希望这是一个相当广泛的问题。也许太宽泛了,无法得到一个好的答案。您应该了解依赖项注入、mockito以及为什么依赖项注入对单元测试很重要。如果您有更具体的问题和具体的例子,请回来。