#java #junit #assert #fileinputstream
#java #junit #утверждать #fileinputstream
Вопрос:
В настоящее время я пытаюсь использовать JUnit-тест для моего основного метода для игры mastermind. Мой входной файл содержит ввод с недопустимой длиной для ввода, и я ожидаю, что мой основной метод выдаст исключение где-нибудь в конце строки. Как мне проверить, что исключение генерируется во время выполнения моего основного метода? Я пытался использовать следующий код для решения этой проблемы:
@Test
void testPlayErrors2() throws FileNotFoundException {
String[] args= null;
final InputStream original=System.in;
final InputStream fileIn= new FileInputStream(
new File("playTest.txt"));
System.setIn(fileIn);
assertThrows(
MastermindIllegalLengthException.class,
() -> (Mastermind.main(args)),
"Expected Mastermind.main() to throw MastermindIllegalLengthException, but it didn't"
);
System.setIn(original);
}
Я получаю ошибки компиляции при использовании assertthrows. Я точно знаю строку в моем текстовом файле, где должно быть сгенерировано исключение, поэтому я также был бы в порядке, если бы мог отслеживать входной поток, например, передавая его по одной строке за раз, а затем перехватывая исключение там, где я его ожидаю, но я не знаю, как это сделать.
Комментарии:
1. Пока ваш тест выглядит хорошо. Какое сообщение об ошибке вы получаете? Вы пробовали отлаживать свой код?
2. Поэтому, когда я навожу курсор на ошибки, я вижу следующее: В assertThrows: метод assertThrows(Class<T>, Executable, String) в утверждениях типа неприменим для аргументов (Class<MastermindIllegalLengthException>, () -> {}, String) в Mastermind.main(аргументы): Недопустимое выражение как оператор
3. Также, если я изменю это для проверки конкретных методов, я получу сообщение: целевой тип этого выражения должен быть функциональным интерфейсом при вызове метода.
Ответ №1:
Вы должны удалить круглые скобки из Mastermind.main(аргументы):
assertThrows(
MastermindIllegalLengthException.class,
() -> Mastermind.main(args),
"Expected Mastermind.main() to throw MastermindIllegalLengthException, but it didn't"
);
Я бы также удалил сообщение и использовал стандартное сообщение об ошибке JUnit:
assertThrows(
MastermindIllegalLengthException.class,
() -> Mastermind.main(args)
);