я бы первым изменить способ взять сканер в качестве (принципы нагнетательных зависимостей) аргумент:
public static String whatsYourName(Scanner in) {
System.out.println("Input your name:");
yourName = in.next();
return yourName;
}
Тогда становится легко тест:
@Test public void testName() {
Scanner in = new Scanner("my name");
assertEquals("my name", whatsYourName(in));
}
Теперь, только тесты, что ваши метод извлекает правильную информацию из Сканера, он не проверяет, что пользователь может что-то ввести, но это будет частью ваших интеграционных тестов, а не модульных тестов.
Также обратите внимание, что ваш метод, по существу, эквивалентно return in.next();
так вы на самом деле тестирования next
метод Scanner
, который является ненужным. Но если метод будет более сложным, будет применяться принцип.
Очень интересная деталь для чтения: Google guide on Writing Testable Code.
Здесь нет никаких вопросов ... – Keppil
Что такое 'in'? Вы можете предоставить свой собственный входной поток, который предоставляет известные данные, и убедитесь, что метод возвращает ожидаемый результат. – assylias
Не могли бы вы подробно остановиться? – Laresh