Vert.x带有TimeoutException的测试暂停:测试执行超时 [英] Vert.x Test halts with TimeoutException: The test execution timed out

查看:83
本文介绍了Vert.x带有TimeoutException的测试暂停:测试执行超时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆