迁移到 Spring Boot 3 并从 Sleuth 重构为 Micrometer 后,我无法再使用 WebTestClient + Tracer 测试 TraceId 传播。
我在这里的测试是有一个简单的 @RestController ,我希望通过 Tracer 传播 traceId :
@RestController
class MyTraceIdController(@Autowired private val tracer: Tracer) {
@GetMapping("/trace")
fun info(): ResponseEntity<String> {
val traceKey = "x-b3-traceid"
// Using tracer the traceId is retrieved at runtime but not during test
val responseHeaders = HttpHeaders()
responseHeaders.set(traceKey, tracer.currentSpan()?.context()?.traceId().toString())
return ResponseEntity
.ok()
.headers(responseHeaders)
.body("OK")
}
}
Run Code Online (Sandbox Code Playgroud)
我们的目标是通过 WebTestClient 来测试它:
@AutoConfigureWebTestClient
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
class MyTraceIdTests(@Autowired private val webTestClient: WebTestClient) {
@Test …Run Code Online (Sandbox Code Playgroud)