spring - 如何在@WebFluxTest 中@Autowired 由WebTestClient 调用的测试控制器?
问题描述
我有一个控制器仅用于使用虚拟 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 自动配置?
解决方案
注释仅使用相关 bean的@WebFluxTest
子集填充 Spring TestContext:
@WebFluxTest 自动配置 Spring WebFlux 基础结构并将扫描的 bean 限制为 @Controller、@ControllerAdvice、@JsonComponent、Converter、GenericConverter、WebFilter 和 WebFluxConfigurer。使用 @WebFluxTest 注释时,不会扫描常规 @Component 和 @ConfigurationProperties bean。@EnableConfigurationProperties 可用于包含 @ConfigurationProperties bean。来自Spring Boot 文档
您Tracer
将不会成为此 TestContext 开箱即用的一部分。
对于您@WebFluxTest
,您可以提供此 bean 的模拟版本@MockBean
:
@WebFluxTest(controllers = TestController.class)
public MyTest {
@Autowired
private WebTestClient webClient;
@MockBean
private Tracer tracer;
@Test
public void testTrace() {
webClient.get().uri("/trace")...
}
}
...如果您想测试完整的集成,我宁愿使用@SpringBootTest
.
推荐阅读
- python - 通过 conda 安装了 pytorch,但无法在 Windows 10 中导入
- sql - 在 SQL 数据库中自动进行回归分析
- asp.net-core - 对于 Asp.Net.Core,ServiceStack AutoQuery 为 Null,并且在 CreateQuery 处引发 NullReferenceException
- flutter - 让代码在小部件创建颤动时运行
- svn - svn 卡住,因为磁盘配额超出
- java - 由一个线程写入然后由另一个线程读取的Java对象的实例字段是否必须是易失的?
- jquery - 如果在 bootstrap 4 表单中未使用 JQuery 选中复选框,则删除克隆的元素
- encoding - 如何将在字符集 UTF8 中创建的数据作为字符集 Shift-JIS 写入文件而不会丢失字符
- c++ - 我是 C++ 新手。在学习了基本知识后,我想做井字游戏。对于印刷板,我写了下面的代码,但它显示错误
- node.js - 具有 pm2 的节点集群每隔一个请求就排队