如果我使用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();
}
}
答案 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();