当我试图在单元测试中模拟侦探时,春云失败

时间:2017-08-29 14:23:48

标签: spring unit-testing spring-boot spring-cloud spring-cloud-sleuth

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

查找示例代码here

微服务 msvc-a 正在使用Dalston版本并且有两个测试类,其中只有在我尝试模拟Tracer和Span对象的类失败时。

微服务 msvc-b 使用的是Camden版本,并且具有相同的测试类。

同时,当我在STS中处于调试模式时,我无法理解这种情况,为什么我看不到任何错误跟踪或类似的东西......只有NullpointerException。

enter image description here

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

2 个答案:

答案 0 :(得分: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());
 }

答案 1 :(得分:0)

Tracer完全不会用Finchley.SR2嘲笑,所以我最终得到了这个:

Tracing tracing = Tracing.newBuilder().build();
Tracer tracer = tracing.tracer();