【发布时间】:2021-04-27 19:46:58
【问题描述】:
在我的 AcceptanceTests 中,我尝试使用以下非常粗鲁的代码来启动 Ktor EmbeddedServer,以便能够检查服务器是否已启动并且测试是否可以启动:
fun start() {
val configPath = ClassLoader.getSystemResource("application-acceptanceTest.conf").file
val appEnvironment = commandLineEnvironment(arrayOf("-config=$configPath"))
engine = embeddedServer(CIO, appEnvironment)
engine.addShutdownHook {
stop()
}
engine.start()
val disposable = engine.environment.monitor.subscribe(ApplicationStarted) {
started = true
}
while (!started) {
// the start method should not exit until server is started successfully
Thread.sleep(10)
}
disposable.dispose()
}
不幸的是,这在通过 gradle 运行测试时不起作用,但在 IntelliJ 中的单个测试运行期间确实有效。任何提示表示赞赏。
我已经尝试添加一些日志语句,并且确实看到了 while 循环没有退出,因此我认为 ApplicationStarted-event 没有正确处理。
编辑:删除while循环时,测试使用gradle运行,但不在IntelliJ中:-(
【问题讨论】: