У моего приложения есть поток, в конце которого вызывается метод System.exit(int)
.
Я пытаюсь проверить этот поток, запустив тест с использованием TestNG.
Однако, когда я запускаю тест, я получаю странное сообщение, хотя тест завершен:
Просто для того, чтобы найти основную причину, я удалил System.exit(int)
из реального потока и тест прошел, как и ожидалось, поэтому проблема здесь заключается в методе System.exit(int)
.
Чтобы решить эту проблему, я попытался высмеять проблемный метод, но не смог найти правильный способ сделать это. Вот что я сделал
- Я добавил
java.lang.System.class
в @PrepareForTest
в классе испытаний.
- добавлено
PowerMockito.mockStatic(java.lang.System.class)
в тесте
Я пытался смоделировать метод двумя способами:
а.
PowerMockito.replace(PowerMockito.method(System.class, "exit", int.class))
.with((proxy, method, args) -> null);
При выполнении этого способа похоже, что макет не работает, потому что в конце теста я получаю то же сообщение, которое я также получал, когда не применял никаких макетов в System.exit (int)
б.
PowerMockito.doNothing().when(System.class, "exit", Mockito.any());
Таким образом, я получаю это исключение в начале теста:
org.powermock.reflect.exceptions.MethodNotFoundException: No method found with name 'exit' with parameter types: [ <none> ] in class java.lang.System.
Я уже издевался над некоторыми методами таким образом, не уверен, почему с System.exit(int)
он не работает.
Есть идеи?
Спасибо