【发布时间】:2021-06-24 21:34:31
【问题描述】:
我在我的 springboot 应用程序中使用了 sleuth。现在我想编写单元测试以确保为请求生成 traceId。对此的任何建议或代码参考将不胜感激。谢谢。
【问题讨论】:
标签: spring-boot junit5 spring-cloud-sleuth
我在我的 springboot 应用程序中使用了 sleuth。现在我想编写单元测试以确保为请求生成 traceId。对此的任何建议或代码参考将不胜感激。谢谢。
【问题讨论】:
标签: spring-boot junit5 spring-cloud-sleuth
您可以创建一个返回 traceId 的控制器方法。要获取 traceId,请注入 Tracer 并从当前 span 的上下文中获取 traceId。
@WebMvcTest 不会为此包含必要的自动配置,所以我猜你实际上必须启动服务器、发送请求并检查结果。
【讨论】:
这取决于。 :)
如果您的组件使用Tracer 创建跨度,您可以只注入一个模拟(例如:使用 Mockito)并在模拟上进行验证。
如果你想测试 Sleuth 的仪器,你至少需要启动上下文,这样它就不再是严格的单元测试了,你可以在 Sleuth 测试中看到 ApplicationContextRunner 的用法。
您还可以检查日志,在响应中返回跟踪数据或设置 wiremock(而不是 Zipkin)并测试 Sleuth 是否将跨度发送给它。
此外,如果您使用的是最新的快照(或稍等片刻,直到它发布):我们现在有一个新的执行器端点,它以 Zipkin 格式返回最新的跨度:https://github.com/spring-cloud/spring-cloud-sleuth/pull/1964
【讨论】: