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 测试,我不测试框架,我测试我的代码和调用以及我的业务逻辑。
如何在 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 测试,我不测试框架,我测试我的代码和调用以及我的业务逻辑。