2017-07-10 6 views
0

私の春のブートアプリケーションで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(); 
} 

}

+0

だから、ユニットテストのためにのみ失敗し、次のあなたが何をすべきtracer Beanをモックとしたいと仮定すると?あなたのユニットテストを私に見せてもらえますか? –

+0

AbstractSpanAccessorTest.classを見てください –

答えて

1

なぜあなたはスパンをからかっている模擬するために、このクラスを拡張していますか?これはまったく意味がありません。また、SpanはBeanではありません。あなたはすでにビルダーを介して通常のスパンを作成しておきます。あなたがブートコンテキストプロパティを設定しているとあなたが

public class AbstractSpanAccessorTest { 
@MockBean 
private Tracer tracer; 

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).when(tracer).getCurrentSpan(); 
    doReturn(spanMock).when(tracer).createSpan(anyString()); 
} 

private long createId() { 
    return random.nextLong(); 
} 
} 
+0

ありがとうございました!今は問題なく動作します。あなたは正しい、私の間違いはここに... –

関連する問題