Консольное приложение тестирования JUnit - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь использовать 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 ]

2 голосов
/ 27 марта 2019

Если вы получаете ввод от 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. Затем вы можете ввести это в свой тестируемый класс. Это поможет иметь любого провайдера ввода: консоль, веб, БД и т. Д. Имея интерфейс, вы сможете заглушить любой пользовательский ввод. Хорошая библиотека для окурков: Mockito .

0 голосов
/ 27 марта 2019

Вы можете использовать System.in для чтения со стандартного ввода (вероятно, с вашей "консоли")

...