У меня есть вспомогательный класс, который содержит публичного статический метода getProductHandler(String name)
:Применение Mockito к блоку протестировать функцию, которая содержит статический метод вызова и асинхронная задача
public class ProductHandlerManager {
public static Handler getProductHandler(String name) {
Handler handler = findProductHandler(name);
return handler;
}
}
CustomerService
класса использует выше ProductHandlerManager
:
public class CustomerService {
...
public void handleProduct() {
Handler appleHandler = ProductHandlerManager.getProductHandler("apple");
appleHandler.post(new Runnable() {
@Override
public void run() {
//...
}
});
}
}
Я хочу провести тестирование handleProduct()
метод в CustomerService
класс. Я попытался использовать mockito, чтобы высмеять часть ProductManager.getProductHandler("apple")
в тесте, однако mockito не поддерживает статический метод, издевательский. Как я могу использовать Mockito для тестирования модуля handleProduct()
?
Пожалуйста, не предлагайте мне использовать Powermock, так как я прочитал статью, в которой говорится, что если мне нужно издеваться над статическим методом, это указывает на плохой дизайн. Но я могу принять предложения по рефакторингу кода, чтобы сделать его проверяемым.
Этот вопрос уже ответил в вашем исходном вопросе http://stackoverflow.com/questions/33606719/missingmethodinvocationexception-from-mockito-when-do-unit-test/33606767?noredirect=1#comment54994764_33606767. Сделайте его экземпляром (не статическим) методом. –
Я хотел бы посмотреть, есть ли альтернативное решение (сохраняйте этот метод статическим). Например. через рефакторинг кода – user842225
Нет, нет. Вы можете изменить метод на нестатический, использовать PowerMock (не рекомендуется), или вы могли бы создать метод делегата, отличный от экземпляра, и высмеять его вместо этого (обычно работайте при работе с устаревшим кодом). –