Использование JUnit для тестирования основного метода, который требует симуляции ввода с клавиатуры с потоком ввода?

java input junit

4334 просмотра

2 ответа

Давайте предположим, что у меня есть программа с методом main, который использует java.util.Scannerкласс для получения пользовательского ввода.

import java.util.Scanner;

public class Main {
    static int fooValue = 0;

    public static void main(String[] args) {
        System.out.println("Please enter a valid integer value.");
        fooValue = new Scanner(System.in).nextInt();
        System.out.println(fooValue + 5);
    }
}

Все, что делает эта программа, получает целочисленный ввод и выводит целое число плюс 5. Что означает, что я могу создать такую ​​таблицу:

+-------+-----------------+
| Input | Expected output |
+-------+-----------------+
|     2 |               7 |
|     3 |               8 |
|     5 |              12 |
|     7 |              13 |
|    11 |              16 |
+-------+-----------------+

Мне нужно сделать тест JUnit для этого набора входных данных. Как проще всего подойти к такой проблеме?

Автор: zxgear Источник Размещён: 12.11.2019 09:14

Ответы (2)


4 плюса

Решение

Вы можете перенаправить System.out, System.in и System.err следующим образом:

System.setOut(new PrintStream(new FileOutputStream("output")));

System.setErr(new PrintStream(new FileOutputStream("error")));

System.setIn(new FileInputStream("input"));

Таким образом, в вашем модульном тесте вы можете настроить это перенаправление и запустить свой класс.

Автор: Abaddon.Gutierrez Размещён: 24.06.2015 01:47

0 плюса

Библиотека системных правил предоставляет правила JUnit для таких тестов. Кроме того, вы должны использовать параметризованный тест.

Автор: Stefan Birkner Размещён: 04.07.2015 08:15
Вопросы из категории :
32x32