Eya*_*ort 5 groovy spring-boot spring-cloud-sleuth spring-boot-test
我正在从 Spring Boot 1.5.21 迁移到 2.2.5,并且在此过程中也从 spring-boot-cloud 版本 Edgware.SR6 迁移到 Hoxton.SR3。这一举动迫使我放弃了侦探自己实现的跟踪器/跨度模型,并接受了勇敢的新模型。但是,我的控制器集成测试有问题。
我有一个调用Edge了一个主类的微服务EdgeApplication,我使用 Spock 作为测试框架。我的代码包括以下测试类:
@ContextConfiguration(classes = EdgeApplication.class)
@SpringBootTest(classes = EdgeApplication.class)
@ActiveProfiles(profiles = ["test"])
@AutoConfigureMockMvc
class VerificationCodeControllerSpecIT extends Specification {
@Autowired
MockMvc mockMvc
def setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build()
}
def "Generate change password verification code"() {
// Some code calling a PrincipalController via mockMvc.perform()
}
}
Run Code Online (Sandbox Code Playgroud)
以前,在 Spring Boot 1.5.21 中,当调用到达 时PrincipalController,会初始化一个带有 span 的默认跟踪上下文。现在,在 Spring Boot 2 中,情况并非如此。我必须强调,这种缺乏上下文的PrincipalController情况只发生在测试代码中,而不是在微服务的实际运行中。
为什么这种行为改变了,我怎样才能恢复旧的行为,即在调用控制器时有一个带有 span 的默认跟踪上下文?
我添加了一个演示项目:
Demo
您将能够运行集成测试,并在调试中看到控制器中tracer.currentSpan()为空(同时包含正常项目运行的值)
小智 3
在 Spring Boot 1.5.21 中,spring-cloud-sleuth 的最新支持版本是 1.3.6.RELEASE。
在旧版本中,Sleuth曾经有一个拦截器:'TraceHandlerInterceptor',当Servlet调度程序触发此拦截器时,它会创建一个span。
在版本 1.5.21 上运行 Spring Boot 测试时,MockMvc init TestDispatcherServlet 会触发上述拦截器。
作为与 Brave 对齐的 HTTP 检测的一部分,该拦截器已被删除。
使用 MockMvc 时,有必要显式配置您的过滤器链。你的 MockMvc 缺少 TracingFilter
| 归档时间: |
|
| 查看次数: |
687 次 |
| 最近记录: |