У меня есть модульный тест vertx с vertx версии 3.3.2 и JUnit версии 4.12. Следующий модульный тест никогда не завершается:
@RunWith(VertxUnitRunner.class)
public class SomeVerticleTest {
private Vertx vertx;
@Before
public void before(TestContext context) {
vertx = Vertx.vertx();
vertx.deployVerticle(SomeVerticle.class.getName(), r -> context.asyncAssertSuccess()); // problem is in this line, see answer for solution!
}
@Test
public void doStuff(TestContext context) {
String encodedMessage = Json.encode("myMessage");
Async async = context.async();
vertx.eventBus().send("someVerticle", encodedMessage, asyncResult -> {
// some context.asserts on the message reply
async.complete(); // this line is executed, I can see it in the debugger
});
}
}
Сам тест проходит нормально, сообщение отправлено, правильно обработано обработчиком в SomeVerticle
, и ответ создается и отправляется правильно.
Но: Несмотря на то, что метод doStuff
выполняется и его успех публикуется в Async
объекте, тест запускается бесконечно и никогда не заканчивается. Это можно проверить, добавив метод после проверки, помеченный знаком @After
, который никогда не выполняется.
Я пытался найти ошибку в течение двух часов, но я просто не знаю, в чем именно может быть проблема, поэтому буду рад любой помощи.
[update] Через две минуты тест не проходит с тайм-аутом.
[update 2] Я нашел проблему и выделил ее в отдельный ответ.
System.out.println
послеvertx.eventBus().send(...)
, посмотрите, дойдет ли он когда-нибудь. - person Taylor   schedule 22.08.2016.close()
? - person Dominik Sandjaja   schedule 22.08.2016