Я новичок в 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!
информацию, поэтому я уверен, что выполнение теста достигнет этой точки. Я просто не уверен, почему в конце теста в отчетах говорится, что не было никаких взаимодействий с фиктивным объектом.