Issue
I would like to write tests for reactive controller using @WebFluxTest
annotation, mocking all dependencies.
@WebFluxTest(controllers = MyController.class)
public class MyControllerTest {
@MockBean
SomeService service;
@Autowired
WebTestClient webClient;
//some tests
}
From what I understand, the WebFluxTest
annotation shall apply only configuration relevant to WebFlux tests (i.e. @Controller
, @ControllerAdvice
, etc.), but not another beans.
My spring boot app contains a number of @Configuration
classes that configure a number of beans (annotated as @Bean
). Some of those configurations have also dependencies (autowired by constructor).
@Configuration
@RequiredArgsConstructor
public class MyConfig {
private final AnotherConfig anotherConfig;
@Bean
//...
}
When I run my web flux tests, I can see the context initialization contains an attempt to initialize the MyConfig
(and it fails because of the missing dependency which comes from 3rd party auto-configured lib). How can I configure the test to skip initialization of all of these?
I am able to exclude the problematic configuration class only by excluding auto configuration of the whole app.
@WebFluxTest(controllers = MyController.class, excludeAutoConfiguration = {MyApplication.class})
public class MyControllerTest { ... }
where MyApplication
is the spring boot app autoscanning those configuration classes.
But how can I achieve to skip initialization of MyConfig
only? Or even better, how can I achieve to only include a list of configurations to be initialized?
Solution
Add
@ActiveProfiles("YOUR_ENV_OTHER_THAN_TEST")
below or above @Configuration
For multiple environments..
@ActiveProfiles(profiles ={env1, env2,env3})
Answered By - reverse
Answer Checked By - Cary Denson (JavaFixing Admin)