2
我有一个vertx版本3.3.2和JUnit版本4.12的vertx单元测试。 以下单元测试从未完成:Vertx单元测试永不结束
@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
注释。
我试图找到现在两个小时的错误,但我根本不知道究竟是什么问题,所以我会很乐意提供任何帮助。
[更新] 两分钟后,测试失败,超时。
[更新2] 我发现了问题,并将其放入单独的答案中。
它在哪里阻塞? – Taylor
它执行async.complete()行,在此之后,该进程永远不会结束。在IntelliJ中,测试过程永远不会结束,在运行maven时它也永远不会结束。没有阻止代码 - 至少不是在我的课程中 - 进程挂起。 –
它是否正在退出您的测试方法?在'vertx.eventBus()。send(...)'之后放一个'System.out.println',看它是否到达那里。 – Taylor