我在我的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,我的测试工件是单元测试
答案 0 :(得分:3)
我的问题是我应该如何(而且应该)进行单元测试 LoginNetworkOperation抛出此事件,LoginPresenter处理它 和Mockito一起?
这已经是一个集成测试:您将各个软件模块组合在一起并将其行为验证为一个组。
在这种情况下,正在测试的对象&#34;是LoginNetworkOperation
,EventBus
和LoginPresenter
的组合,模拟对象是LoginNetworkOperation
的输入,无论处理LoginPresenter
的输出。
这三个软件模块也可以进行单元测试:
LoginNetworkOperation.execute
:模仿EventBus
并验证是否使用正确的ExceptionEvent
调用了不同的输入。LoginPresenter.onExceptionEvent
:验证不同ExceptionEvents
的正确行为。EventBus.post
:注册一个模拟的ExceptionEvent
- 处理程序,发布ExceptionEvent
并检查是否调用了处理程序。