私の春のブートアプリケーションでunitTestを実行しようとすると、このエラーが発生します。ユニットテストでZipkinでエラーが発生する(Span.baggageItemsをモックできない)
java.lang.NullPointerException: null
at org.springframework.cloud.sleuth.Span.baggageItems(Span.java:381)
at org.springframework.cloud.sleuth.instrument.web.ZipkinHttpSpanInjector.inject(ZipkinHttpSpanInjector.java:27)
at org.springframework.cloud.sleuth.instrument.web.ZipkinHttpSpanInjector.inject(ZipkinHttpSpanInjector.java:15)
at org.springframework.cloud.sleuth.instrument.web.client.AbstractTraceHttpRequestInterceptor.publishStartEvent(AbstractTraceHttpRequestInterceptor.java:60)
at org.springframework.cloud.sleuth.instrument.web.client.TraceRestTemplateInterceptor.intercept(TraceRestTemplateInterceptor.java:52)
at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:86)
私は春・クラウドの依存関係のため、このバージョンを使用する場合、私は唯一のこのエラーが出ることがわかり:
<spring-cloud.version>Camden.SR6</spring-cloud.version>
:私はこの前のバージョンを使用している場合
<spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
が、
すべてが正常に動作します
このエラーを回避するにはどうすればよいですか?
ユニットテストはSpanAccessor
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();
}
}
だから、ユニットテストのためにのみ失敗し、次のあなたが何をすべき
tracer
Beanをモックとしたいと仮定すると?あなたのユニットテストを私に見せてもらえますか? –AbstractSpanAccessorTest.classを見てください –