【发布时间】:2025-12-13 16:30:01
【问题描述】:
如果我使用 Dalston.SR3 或 Dalston.Release 版本,我尝试在单元测试中模拟 Tracer 和 Span 等对象时遇到一些错误,但如果我使用 Camden.SR6 或 Camden.SR7,则不会发生此问题版本。
查找示例代码here
微服务 msvc-a 正在使用 Dalston 版本并有两个测试类,其中只有我试图模拟 Tracer 和 Span 对象的类失败。
微服务 msvc-b 使用 Camden 版本,测试类相同。
同时,当我在 STS 中处于调试模式时,我无法理解这种情况,以及为什么我看不到任何错误跟踪或类似的东西......只有 NullpointerException。
public class AbstractSpanAccessorTest {
@MockBean
private Tracer tracer;
@MockBean
private Span span;
private Random random = new Random();
@Before
public void mockSpan() {
long id = createId();
Span spanMock = Span.builder().name("mock").traceId(id).spanId(id).build();
doReturn(spanMock.traceIdString()).when(span).traceIdString();
doReturn(span).when(tracer).getCurrentSpan();
doReturn(span).when(tracer).createSpan(anyString());
}
private long createId() {
return random.nextLong();
}
}
【问题讨论】:
-
你能提供一个堆栈跟踪或某事吗?目前,您在屏幕截图中显示了由于响应不能为空而无法抛出 NPE 的情况。还有,你试图嘲笑侦探是什么意思?请显示您的测试并显示导致 NPE 被抛出的行。
-
您好,上面有示例代码的链接 (github.com/fjmpaez911/spring-cloud-sleuth-error)。没有可用的跟踪,但您可以尝试为这两个微服务运行单元测试并查看发生了什么。在实际场景中,我需要模拟 Tracer 和 Span,因为我不想在单元测试中执行类似这样的代码时出现错误 (String traceIdString = spanAccessor.getCurrentSpan().traceIdString();)
-
您好,我知道我拥有它,但您甚至没有编写如何运行或测试它。您没有指向任何课程等请提供我要求的详细信息。否则我将无法帮助您:/
-
好的,抱歉。如果您运行测试(ServiceTest2.java 和 ServiceTest.java)类,您可能会遇到问题
-
在查看代码时,这些测试是集成测试而不是单元测试。我也没有看到任何嘲笑。你能告诉我你在哪里模拟那个代码吗?
标签: spring unit-testing spring-boot spring-cloud spring-cloud-sleuth