Android 上的单元测试 EventBus
Unit Test EventBus on Android
我已经看过 ,但它并没有为我尝试做的事情提供解决方案。
我正在使用 EventBus(来自 greenrobot)在我的应用程序中发送消息。我希望能够对我的应用程序进行单元测试,以确认消息已 post 发送到总线。就是这样。
这是 class 我想用一种方法测试 post 一条消息:
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 使用单例来 post 消息,我不知道如何测试正在执行的单例方法。
还有,这只是一个大项目的一小部分。相关件。我想根据不同的交互
测试消息的正确 posting
您的问题是 CxManager 发布到的事件总线不是您的模拟对象。您必须重新组织代码以将 EventBus 直接或通过依赖项注入传递到 CxManager,以便它发布到该 eventBus 而不是现在获取它。
或者,获取它实际发布到的 EventBus 实例,并订阅它。这里不需要实际模拟 EventBus。
我已经看过
我正在使用 EventBus(来自 greenrobot)在我的应用程序中发送消息。我希望能够对我的应用程序进行单元测试,以确认消息已 post 发送到总线。就是这样。
这是 class 我想用一种方法测试 post 一条消息:
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 使用单例来 post 消息,我不知道如何测试正在执行的单例方法。
还有,这只是一个大项目的一小部分。相关件。我想根据不同的交互
测试消息的正确 posting您的问题是 CxManager 发布到的事件总线不是您的模拟对象。您必须重新组织代码以将 EventBus 直接或通过依赖项注入传递到 CxManager,以便它发布到该 eventBus 而不是现在获取它。
或者,获取它实际发布到的 EventBus 实例,并订阅它。这里不需要实际模拟 EventBus。