Square Otto 事件总线 - 如何使用 junit 和 robolectric 测试 post 和订阅

Square Otto event bus - how to test post and subscription with junit and roboelectric

如何在 android 中测试事件总线。我正在使用奥托。我试过:

@Mock 
Bus bus;

在我的测试中表现出色。但现在我想做的是 post 一个事件,然后检查是否执行了该操作。事件是这样创建的:

new CoolEvent(true,true); 但我不知道检查订阅者代码是否执行的命令。我可以使用 Captor 吗?这是怎么做到的?

我已经知道如何测试了。您可以做两件事。一种是使用 Mockito 并执行此操作:

 ArgumentCaptor<OTTOEventClass> captor = ArgumentCaptor
                   .forClass(OTTOEventClass.class);

然后因为您希望在测试中有总线,您可以验证 post 到总线的是使用 OTTOEventClass 对象创建的。 像这样:

verify(bus).post(captor.capture());

您还可以验证 OTTOEventClass 中的某些标志设置如下:

assertThat(captor.getValue().isFlagSet(), equalTo(true));

您可以做的另一件事就是验证总线 post 是否使用如下类型调用:

verify(bus).post(isA(OTTOEventClass.class)); 

以上仅验证 bus.post(new OTTOEventClass()) 在测试期间某处被调用,并且 posted 的事件属于 OTTOEventClass 类型。

我不测试 otto 订阅者,因为我的测试是关于测试我的功能而不是 Otto。让 Otto 由 Square 测试,我不测试框架,我测试我的代码和调用以及我的业务逻辑。