【发布时间】:2020-05-29 07:19:04
【问题描述】:
我一直在写一个测试类:
class TestVerticle {
@BeforeEach
fun deploy_verticle(vertx: Vertx, testContext: VertxTestContext) {
vertx.deployVerticle(Verticle(), testContext.completing())
}
@Test
fun test(vertx: Vertx, testContext: VertxTestContext) {
testContext.verify {
GlobalScope.launch(vertx.dispatcher()) {
val reply = vertx.eventBus().requestAwait<Long>(AVIOEXTDMZAddr, "1")
assert(reply.body() == 1010L)
testContext.completeNow()
}
}
}
}
如果Verticle的start()方法写成“普通”方式,则Test肯定通过:
override suspend fun start() {
vertx.eventBus().consumer<String>(AVIOEXTDMZAddr){
it.reply(1010L)
}
}
不同的是,如果我使用 vertx-lang-kotlin-coroutines API 实现不同的解决方案,测试会抛出 java.util.concurrent.TimeoutException
override suspend fun start() {
val consumerChannel = vertx.eventBus().consumer<String>(AVIOEXTDMZAddr).toChannel(vertx)
for (msg in consumerChannel) {
msg.reply(1010L)
}
}
我做错了什么?
【问题讨论】:
标签: kotlin vert.x vertx-eventbus