Как / следует ли мне тестировать события EventBus с помощью Mockito?
Я использую EventBus Отто в моем приложении для Android.
В моем LoginNetworkOperation
класс, я ловлю различные виды ошибок сетевого подключения, и я публикую различные события шины для каждого из них, и мой LoginPresenter
Класс зарегистрирован как слушатель, и определенные методы вызываются, когда эти события запускаются.
Мой вопрос заключается в том, как (и я должен) я тестировать LoginNetworkOperation
бросает это событие и LoginPresenter
справляется с этим Mockito
?
Я посмотрел на этот вопрос: модульные тесты Guava EventBus, но он не предоставляет достаточно информации, особенно в части реализации.
public class LoginNetworkOperation {
public void execute(String username, String password) {
try {
// retrofit attempt
} catch (Exception e) {
bus.post(new ExceptionEvent(e));
}
}
}
public class LoginPresenter {
void onExceptionEvent(ExceptionEvent exceptionEvent) {
// Do Something with the exception event
}
}
Кроме того, который должен быть Subject Under Test
вот и какой объект должен быть осмеянным?
Я использую JUnit + Mockito + Robolectric в Android Studio, и мой тестовый артефакт - это юнит-тесты
1 ответ
Мой вопрос заключается в том, как (и должен ли я) выполнить модульное тестирование, генерирует ли LoginNetworkOperation это событие, а LoginPresenter обрабатывает его с помощью Mockito?
Это уже интеграционный тест: вы объединяете отдельные программные модули и проверяете их поведение как группы.
В этом случае "испытуемый объект" представляет собой комбинацию LoginNetworkOperation
, EventBus
а также LoginPresenter
и высмеиваемые объекты являются входами в LoginNetworkOperation
и все, что обрабатывает вывод LoginPresenter
,
Эти три программных модуля также могут быть проверены модулем:
LoginNetworkOperation.execute
: издеватьсяEventBus
и убедитесь, что он вызывается с правильнымExceptionEvent
для разных входов.LoginPresenter.onExceptionEvent
: проверьте правильность поведения для разныхExceptionEvents
,EventBus.post
: зарегистрировать издеватьсяExceptionEvent
-Хандлер, опубликоватьExceptionEvent
и проверьте, что обработчик вызван.