[英]How to @Autowired a test controller invoked by WebTestClient in @WebFluxTest?
我有一个 Controller 仅用于使用虚拟 api 进行测试
@RestController
public class TestController {
@Autowired
private org.springframework.cloud.sleuth.Tracer tracer;
@GetMapping("/trace")
public Mono<String> traceTest() {
...
}
}
这是我的测试
@WebFluxTest(controllers = TestController.class)
public MyTest {
@Autowired
private WebTestClient webClient;
@Test
public void testTrace() {
webClient.get().uri("/trace")...
}
}
当我尝试运行它时,我的 Tracer 不是 Autowired。
当然,如果我将测试更改为@SpringBootTest,一切正常
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public MyTest {
...
}
但我想避免自动装配我的整个 spring 应用程序。 如何让 TestController 自动配置?
@WebFluxTest
注释仅使用相关 bean 的子集填充 Spring TestContext:
@WebFluxTest 自动配置 Spring WebFlux 基础设施,并将扫描的 bean 限制为 @Controller、@ControllerAdvice、@JsonComponent、Converter、GenericConverter、WebFilter 和 WebFluxConfigurer。 使用 @WebFluxTest 注释时,不会扫描常规 @Component 和 @ConfigurationProperties bean。 @EnableConfigurationProperties 可用于包含 @ConfigurationProperties bean。 来自Spring 引导文档
您的Tracer
不会成为此 TestContext 开箱即用的一部分。
对于您的@WebFluxTest
,您可以使用@MockBean
提供此 bean 的模拟版本:
@WebFluxTest(controllers = TestController.class)
public MyTest {
@Autowired
private WebTestClient webClient;
@MockBean
private Tracer tracer;
@Test
public void testTrace() {
webClient.get().uri("/trace")...
}
}
...如果您想测试完整的集成,我宁愿使用@SpringBootTest
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.