代码之家  ›  专栏  ›  技术社区  ›  sebasira

Android上的单元测试事件总线

  •  0
  • sebasira  · 技术社区  · 6 年前

    this SO question 但它并没有为我所要做的提供一个解决方案。

    我正在使用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使用单例来发布消息,而我不知道如何测试正在执行的单例方法。

    而且,这只是一个大项目的一部分。相关部分。我想根据不同的互动测试信息的正确发布

    1 回复  |  直到 6 年前
        1
  •  2
  •   Gabe Sechan    6 年前

    您的问题是CxManager发布到的事件总线不是您的模拟对象。您必须重新组织代码,直接或通过依赖项注入将EventBus传递到CxManager,这样它就可以发布到该EventBus,而不是现在就发布到它。

    或者,获取事件总线的实例,并订阅它。这里没有必要真的模仿EventBus。