【问题标题】:How to disable @Configuration initialization in WebFluxTest?如何在 WebFluxTest 中禁用 @Configuration 初始化?
【发布时间】:2022-01-20 14:49:29
【问题描述】:

我想使用@WebFluxTest 注解为响应式控制器编写测试,模拟所有依赖项。

@WebFluxTest(controllers = MyController.class)
public class MyControllerTest { 
    
    @MockBean
    SomeService service;

    @Autowired
    WebTestClient webClient;

    //some tests
}

据我了解,WebFluxTest 注释应仅适用于与 WebFlux 测试相关的配置(即@Controller@ControllerAdvice 等),而不适用于其他 bean。

我的 Spring Boot 应用程序包含许多 @Configuration 类,这些类配置了许多 bean(注释为 @Bean)。其中一些配置也有依赖关系(由构造函数自动装配)。

@Configuration
@RequiredArgsConstructor
public class MyConfig {

    private final AnotherConfig anotherConfig;

    @Bean
    //...
}

当我运行我的 Web Flux 测试时,我可以看到上下文初始化包含初始化 MyConfig 的尝试(由于缺少来自第 3 方自动配置库的依赖项而失败)。如何配置测试以跳过所有这些的初始化?

我只能通过排除整个应用程序的自动配置来排除有问题的配置类。

@WebFluxTest(controllers = MyController.class, excludeAutoConfiguration = {MyApplication.class})
public class MyControllerTest { ... }

MyApplication 是自动扫描这些配置类的 Spring Boot 应用程序。

但是我怎样才能实现只跳过MyConfig 的初始化?或者更好的是,我怎样才能实现只包含要初始化的配置列表?

【问题讨论】:

  • 不应该,当它这样做时,通常是由于那些被导入或@SpringBootApplication 注释类上有额外的配置。无论哪种情况,测试都无法排除这些类。

标签: spring-boot junit spring-webflux


【解决方案1】:

添加

@ActiveProfiles("YOUR_ENV_OTHER_THAN_TEST")

低于或高于@Configuration

适用于多种环境..

@ActiveProfiles(profiles ={env1, env2,env3})   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2014-07-08
    • 2021-07-13
    • 2020-02-01
    • 2014-10-20
    相关资源
    最近更新 更多