gpt4 book ai didi

java - Vertx 单元测试永远不会完成

转载 作者:行者123 更新时间:2023-11-30 06:52:18 25 4
gpt4 key购买 nike

我有一个 vertx 版本 3.3.2 和 JUnit 版本 4.12 的 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]我发现了问题并将其放入单独的答案中。

最佳答案

答案不在实际的测试方法中,而在设置中。

以下语句未完成:

vertx.deployVerticle(SomeVerticle.class.getName(), r -> context.asyncAssertSuccess());

为了让它真正起作用,我们需要使用文档中提到的 Async 构造 herehere .

导致工作测试的正确陈述如下:

vertx.deployVerticle(SomeVerticle.class.getName(), context.asyncAssertSuccess()); // note the missing r-> 

我希望这个答案能帮助遇到类似问题的人。

关于java - Vertx 单元测试永远不会完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39081840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com