Vert.x带有TimeoutException的测试暂停:测试执行超时 [英] Vert.x Test halts with TimeoutException: The test execution timed out
问题描述
我正在使用Vert.x 3.5.3
.我有这个(简单的)Verticle:
I'm using Vert.x 3.5.3
. I have this (simple) Verticle:
class DialPadVerticle : AbstractVerticle() {
private companion object : KLogging()
override fun start(future: Future<Void>) {
vertx.eventBus().consumer(Address.DIALPAD_COMBINATIONS) { message: Message<Int> ->
val input = message.body()
logger.info { "Received: $input" }
message.reply(JsonObject().put("result", DialPad().combinations(input)))
}
future.complete()
}
override fun stop(future: Future<Void>) {
logger.debug { "Stopping ${this.javaClass.simpleName} (${deploymentID()})...DONE" }
future.complete()
}
}
...并且我正在尝试使用实验性的[c1]为此构建一个单元测试框架.到目前为止,我有这个:
...and I'm trying to build a unit test skeleton for it using the experimental (yet) vertx-junit5
. So far, I have this:
@ExtendWith(VertxExtension::class)
@DisplayName("Dial pad verticle should...")
internal class DialPadVerticleTest {
@BeforeEach
fun prepare(vertx: Vertx, testContext: VertxTestContext) {
vertx.deployVerticle(DialPadVerticle(), testContext.succeeding())
}
@Test
@Throws(Exception::class)
@DisplayName("Consume Message<Int> correctly")
fun `consume message correctly`(vertx: Vertx, testContext: VertxTestContext) {
vertx.eventBus().send<JsonObject>(Address.DIALPAD_COMBINATIONS, 5) {
// Assertions.assertThat(it.succeeded()).isTrue()
testContext.verify {
testContext.completeNow()
}
}
}
}
但是每次我尝试从IntelliJ中运行它时,我都会得到:
But every time I try to run that from within IntelliJ, I'm getting:
java.util.concurrent.TimeoutException: The test execution timed out
at io.vertx.junit5.VertxExtension.joinActiveTestContexts(VertxExtension.java:213)
at io.vertx.junit5.VertxExtension.beforeTestExecution(VertxExtension.java:171)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeTestExecutionCallbacks$4(TestMethodTestDescriptor.java:141)
at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(TestMethodTestDescriptor.java:155)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeTestExecutionCallbacks(TestMethodTestDescriptor.java:140)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:111)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:58)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:113)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:121)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:121)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:121)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:121)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:55)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:74)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
这是vertx-junit5
库上的错误吗?我还注意到,如果Verticles依赖于某些外部配置,即使我将正确的DeploymentOptions().setConfig(JsonObject().put(...))
作为第二个参数传递给deployVerticle
,它也不会读取这些内容.
Is this somehow a bug on the vertx-junit5
library? I've noticed also that, if the Verticles relies on some external config, even though I pass the correct DeploymentOptions().setConfig(JsonObject().put(...))
as second parameter to deployVerticle
, it doesn't read those.
推荐答案
我运行了您的代码,发现执行从未达到测试方法.
I ran your code and noticed that the execution never reached the test method.
您还需要在@BeforeEach
方法中关闭上下文:
You need to also close your context in @BeforeEach
methods:
@BeforeEach
fun prepare(vertx: Vertx, testContext: VertxTestContext) {
vertx.deployVerticle(DialPadVerticle(), testContext.succeeding {
testContext.completeNow()
})
}
testContext.succeeding
仅提供一个AsyncResult
处理程序,用于检查结果是否成功,但不会将整个测试上下文标记为已完成.它简化了检查中介步骤的过程.
testContext.succeeding
only provides a AsyncResult
handler that checks that the result succeeded, but it does not mark the whole test context as having completed. It simplifies checking intermediary steps.
现在测试通过就可以了!
Now the test passes just fine!
这篇关于Vert.x带有TimeoutException的测试暂停:测试执行超时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!