Spring Boot 3 @SpringBootTest 注解的测试不执行网关自动配置

use*_*488 5 spring-3 spring-boot-test spring-cloud-gateway

我有一个非常简单的测试:

@SpringBootTest(properties = {"instance.role=GATEWAY", "instance.name=test-instance", "debug=true"})
@TestPropertySource(locations = {"classpath:application.yaml"})
class GatewayWiringTest {

    @Autowired
    private MySpringBootApplication application;

    @Test
    void gatewayConfigLoads() {
        assertThat(application).isNotNull();
    }
}
Run Code Online (Sandbox Code Playgroud)

由于我的应用程序以不同的 bean 配置启动,根据分配的角色,我使用此类测试来测试每个配置是否可加载。

它确实在 Spring Boot 2.7 上运行没有问题。它不能与 Spring Boot 3.0 一起运行(显然,在将 Java 也更新到版本 17 后,而不仅仅是 spring/spring boot 依赖项)。错误的根本原因是:

org.springframework.beans.factory.NoSuchBeanDefinitionException:没有“org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder”类型的合格 bean 可用:预计至少有 1 个有资格作为自动装配候选者的 bean。

我已将问题追溯到GatewayAutoConfiguration未评估加载的 Spring Cloud Gateway 服务器依赖项中的类 - 这是应该提供缺少的 bean 的自动配置类。

我还通过运行测试并查看类路径来验证执行测试时该类位于类路径上。mvn -X问题不在于加载类的两个条件之一评估为 false,问题在于这些条件从一开始就没有得到评估 - 使用生成的--debug条件评估报告运行测试,并且该类GatewayAutoConfiguration没有出现在两个列表中的任何一个中 - 匹配和不匹配的条件。

为什么不被处理?与 Spring Boot 2.7 相比,在这方面我需要对 Spring Boot 3.0 做哪些不同的事情?