Я пытаюсь протестировать программу обработки файлов с помощью Junit. В некоторых случаях программа должна распечатать ошибку и завершить свой запуск. Однако использование «System.exit (-1)» приводит к тому, что программа завершает все тесты Junit. Есть ли способ избежать этого?
Вместо этого я могу напечатать ошибку, а затем return null
, однако нахожу ее довольно не элегантной.
private List<String> parseData(String[] args){
if (args.length != 2){
System.err.println(ERROR + INPUT_ERROR + "\n");
System.exit(EXIT_CODE);
Есть ли способ проверить, называется ли программа «System.exit», не закрывая ее? Спасибо.
2 ответа
Я думаю, что более не элегантно использовать System.exit для проверки входных параметров. Почему бы просто не выдать исключение и позволить обработчику этого метода его обработать?
Хотя я думаю, что решение AdrianM является идеальным, вы также можете решить это с помощью насмешек.
Вариант первый: использовать фальшивую платформу, такую как PowerMock, которая позволяет вам макетировать статические методы, чтобы вы могли создавать {{ X0}} ничего не делать.
Вариант второй: использовать внедрение зависимостей и любой фальшивый фреймворк. Создайте этот интерфейс и реализующий класс:
public interface SystemExit {
void exit(int code);
}
public class SystemExitImpl implements SystemExit {
public void exit(int code) {
System.exit(code);
}
}
Затем сделайте класс, который содержит parseData
, примите SystemExit
в качестве параметра конструктора и сохраните его в переменной-члене (или используйте установщик для переменной-члена, который позволит вам установить его после построения). В вашем рабочем коде передайте SystemExitImpl
. В своем тесте создайте макет для SystemExit
и передайте его вместо этого.
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].