Я предлагаю вам разделить код на три части:
- Чтение ввода (например,
name
в вашем примере)
- Делайте то, что вам нужно сделать с этим входом
- Распечатать результаты
Вам не нужно тестировать ввод и результаты печати, поскольку это код Java, который уже тестировался людьми, пишущими Java.
Единственное, что вам нужно проверить, это то, что вы делаете, что бы это ни было. Модульные тесты названы так, потому что они тестируют блоки кода изолированно. Вы не тестируете всю программу, вы тестируете небольшие фрагменты, которые являются автономными и имеют четко определенную функцию.
В модульных тестах не следует полагаться на операции ввода / вывода. Вы должны предоставить входы и ожидаемые результаты непосредственно в модульном тесте. Иногда удобно использовать операции чтения файлов для ввода или вывода (например, если объем данных огромен), но, как правило, чем больше вы вводите / выводите в своих модульных тестах, тем сложнее они становятся, и вы скорее не делать юнит, а интеграционные тесты.
В вашем случае вы как-то используете name
. Если это единственный параметр, тогда создайте метод - давайте назовем его nameConsumer
- который принимает это имя, что-то делает и возвращает его результат. В своих юнит-тестах сделайте что-то вроде этого:
@Test
public void testNameConsumer() {
// Prepare inputs
String name = "Jon";
String result = nameConsumer(name);
assertEquals("Doe", result);
}
Перенесите ваши println
и readLine
вызовы на другие методы и используйте около nameConsumer
, но не в своих модульных тестах.
Подробнее об этом здесь:
Проще говоря, это окупается.