тест vertx-lang- kotlin -программ не удался - PullRequest
0 голосов
/ 13 февраля 2020

Я пишу тестовый класс:

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()
      }

    }
  }
}

Если метод start () Verticle написан "общим" способом, тест пройден положительно:

override suspend fun start() { 
   vertx.eventBus().consumer<String>(AVIOEXTDMZAddr){
         it.reply(1010L) 
      }
    }

Иными словами, если я реализую другое решение с использованием API-функций vertx-lang- kotlin, тест выдаст java .util.concurrent.TimeoutException

override suspend fun start() { 
 val consumerChannel = vertx.eventBus().consumer<String>(AVIOEXTDMZAddr).toChannel(vertx)
    for (msg in consumerChannel) {
        msg.reply(1010L)
      }
    }

что такое Я делаю не так?

1 Ответ

1 голос
/ 14 февраля 2020

L oop на канале блокирует сопрограмму. В этом случае он блокирует начало вашей вертикали.

Оберните ваш for loop в launch блок:

async {
    for (msg in consumerChannel) {
        msg.reply(1010L)
      }
    }
}
...