Модульный тест EventBus на Android - PullRequest
0 голосов
/ 10 сентября 2018

Я уже видел этот ТАК вопрос , но все же он не дает решения того, что я пытаюсь сделать.

Я использую EventBus (от greenrobot) для отправки сообщений через мое приложение. Я хотел бы иметь возможность протестировать мое приложение для подтверждения того, что сообщение было отправлено на шину. Только это.

Вот класс, который я хотел бы протестировать с помощью одного метода, отправляющего сообщение:

public class CxManager {
    public void postMessage(JsonObject data) {
        EventBus.getDefault().post(new MyCustomEvent(data));
    }
}

А вот тест, который я пробовал, но он не работает:

@RunWith(MockitoJUnitRunner.class)
public class CxManagerTest {

    @Mock EventBus eventBus;
    private CxManager cxManager;
    private JsonObject testJsonObject;

    @Before public void setUp() throws Exception {
        cxManager = new CxManager();

        testJsonObject = new JsonObject();
        testJsonObject.addProperty("test", "nada");
    }

    @Test public void shouldPass() {
        cxManager.postMessage(testJsonObject);

        verify(eventBus).post(new MyCustomEvent(testJsonObject));
    }
}

Я написал этот тест, даже зная, что он может быть неудачным, потому что EventBus использует Singleton для отправки сообщений, и я не знаю, как проверить выполняемый метод singleton.

Кроме того, это всего лишь часть большого проекта. Соответствующие штуки. И я хотел бы проверить правильность публикации сообщений в соответствии с различными взаимодействиями

1 Ответ

0 голосов
/ 10 сентября 2018

Ваша проблема в том, что шина событий, которую отправляет CxManager, не является вашим фиктивным объектом.Вам нужно было бы реорганизовать свой код для передачи EventBus в CxManager, либо напрямую, либо через внедрение зависимостей, чтобы он отправлял сообщения в этот eventBus, а не получал его сейчас.

В качестве альтернативы, получите экземплярEventBus его фактически публикует и подписывается на него.Здесь нет необходимости издеваться над EventBus здесь.

...