【发布时间】:2016-09-21 04:07:27
【问题描述】:
我是 Vert.x 3 的新手,我正在尝试为一个简单的事件处理程序编写单元测试。现在,我要做的就是检查被测试的 Verticle 是否委托给正确的组件,该组件是使用 Mockito 作为模拟创建的。
我的测试代码如下所示:
@Rule
public final RunTestOnContext vertxRule = new RunTestOnContext();
@Before
public void setUp(TestContext context) {
vertx = vertxRule.vertx();
//verticle is set up with mock delegate before deployment
vertx.deployVerticle(verticle);
}
@After
public void tearDown(TestContext context) {
vertx.close(context.asyncAssertSuccess());
}
@Test
public void testDelegate(TestContext context) {
EventBus eventBus = vertx.eventBus();
Event event = new Event("id", "description")
eventBus.publish("event.channel", Json.encode(event));
//Mockito.verify
verify(delegate).invokeMethod(anyString(), anyString());
}
Veticle 包含类似于以下的代码:
private Delegate delegate;
@Override
public void start(Future<Void> future) throws Exception {
vertx.eventBus().consumer("event.channel", message -> {
logger.info("received!");
Event event = Json.decodeValue(message.body().toString(), Event.class);
delegate.invokeMethod(event.getId(), event.getDescription());
});
}
但是,每次我运行测试时,我总是收到一条错误消息,指出没有调用模拟。我确信模拟对象被正确注入,因为如果我在事件总线构造之外调用它,测试就会通过。此外,代码记录了received! 信息,所以我确信测试执行达到了这一点。我只是不确定为什么在测试结束时,报告说没有与模拟对象的交互。
【问题讨论】: