1

如果我使用 Dalston.SR3 或 Dalston.Release 版本,当我尝试在单元测试中模拟 Tracer 和 Span 等对象时会遇到一些错误,但如果我使用 Camden.SR6 或 Camden.SR7 版本,则不会发生此问题。

在此处查找示例代码

微服务 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();
    }
}

4

2 回答 2

0

这是我的错误。模拟 Span 的正确方法是:

 @Before
 public void mockSpan() {
     long id = createId();
     span = Span.builder().name("mock").traceId(id).spanId(id).build();
     doReturn(span).when(tracer).getCurrentSpan();
     doReturn(span).when(tracer).createSpan(anyString());
 }
于 2017-08-30T14:14:24.407 回答
0

Tracer 根本不会用 Finchley.SR2 模拟,所以我最终得到了这个:

Tracing tracing = Tracing.newBuilder().build();
Tracer tracer = tracing.tracer();
于 2018-11-13T20:29:07.780 回答