Как / следует ли мне тестировать события 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 и проверьте, что обработчик вызван.
Другие вопросы по тегам