如何/我应该用Mockito对EventBus事件进行单元测试?

时间:2016-03-23 13:38:10

标签: android unit-testing mockito

我在我的Android应用中使用了Otto的EventBus。

在我的LoginNetworkOperation类中,我捕获了不同类型的网络连接错误,并且我为每个错误发布了不同的总线事件,并且我的LoginPresenter类被注册为侦听器,并且在调用某些方法时这些事件被解雇了。

我的问题是我应该如何(并且应该)进行单元测试LoginNetworkOperation是否会引发此事件,而LoginPresenter是否会Mockito处理它?<​​/ p>

我查看了这个问题:Guava EventBus unit tests但它没有提供足够的信息,特别是在实施部分。

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哪个应该是模拟对象?

我在Android Studio中使用JUnit + Mockito + Robolectric,我的测试工件是单元测试

1 个答案:

答案 0 :(得分:3)

  

我的问题是我应该如何(而且应该)进行单元测试   LoginNetworkOperation抛出此事件,LoginPresenter处理它   和Mockito一起?

这已经是一个集成测试:您将各个软件模块组合在一起并将其行为验证为一个组。

在这种情况下,正在测试的对象&#34;是LoginNetworkOperationEventBusLoginPresenter的组合,模拟对象是LoginNetworkOperation的输入,无论处理LoginPresenter的输出。

这三个软件模块也可以进行单元测试:

  • LoginNetworkOperation.execute:模仿EventBus并验证是否使用正确的ExceptionEvent调用了不同的输入。
  • LoginPresenter.onExceptionEvent:验证不同ExceptionEvents的正确行为。
  • EventBus.post:注册一个模拟的ExceptionEvent - 处理程序,发布ExceptionEvent并检查是否调用了处理程序。