繁体   English   中英

Spring 测试主线程卡在应用程序的无限循环中

[英]Spring Test Main Thread Gets Stuck in Application's Infinite Loop

我正在为我的一个应用程序编写集成测试。 我在测试类上有以下注释:

@SpringBootTest(
    classes = {Application.class, ApplicationConfig.class})

我的应用程序是由ApplicationReadyEvent触发的普通 Spring Boot 应用ApplicationReadyEvent 它包含一个无限循环(轮询kafka )。

问题是,由于它是一个无限循环,主线程永远不会出现,我的测试也不会继续进行。 “解决方案”可以在不同的线程中运行循环,但我不想修改我的应用程序以便我可以测试它们。

有一个更好的方法吗?

您需要大致了解 Spring Boot 测试和测试的生命周期。 当您使用 SpringBootTest 注释一个类时 -> Spring Boot 会扫描所有需要创建的适当 bean,并将整个应用程序置于测试范围内。 由于它是一个繁重的过程,它确保可以重用应用程序上下文。

现在来看应用程序是如何出现的,它遵循典型的 Spring Boot 生命周期。 当您运行 spring boot jar 时,主类实际上是 - “org.springframework.boot.loader.JarLauncher”,它在其主方法中扫描整个类路径,创建适当的 bean 并调用用 SpringApplication 注释的类的主方法. 在测试生命周期中,遵循类似的过程并启动 spring 应用程序。 此外,在与测试执行程序相同的线程上调用“ApplicationReady”方法,并且由于存在while循环,它会阻止进一步的执行。

不知道您的“无限循环”是什么样的,但对于使用 Kafka 消息/事件,我建议您查看KafkaListener 通过这样做,您可以更轻松地编写集成测试。

我不想修改我的应用程序只是为了测试它们。 ” - 实际上,您应该重写代码以便能够对其进行测试:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM