当我试图在单元测试中模仿sleuth时,SpringCloud失败了

当我试图在单元测试中模仿sleuth时,SpringCloud失败了,spring,unit-testing,spring-boot,spring-cloud,spring-cloud-sleuth,Spring,Unit Testing,Spring Boot,Spring Cloud,Spring Cloud Sleuth,如果使用Dalston.SR3或Dalston.Release版本,我在单元测试中尝试模拟Tracer和Span等对象时会遇到一些错误,但如果使用Camden.SR6或Camden.SR7版本,则不会出现此问题 查找示例代码 Microservicemsvc-a使用的是Dalston版本,有两个测试类,其中只有我试图模拟跟踪器和Span对象的类失败 Microservicemsvc-b正在使用Camden版本,并且具有相同的测试类 同时,当我在STS中处于调试模式时,我无法理解这种情况,以及为什

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

查找示例代码

Microservicemsvc-a使用的是Dalston版本,有两个测试类,其中只有我试图模拟跟踪器和Span对象的类失败

Microservicemsvc-b正在使用Camden版本,并且具有相同的测试类

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

public类AbstractSpanAccessorTest{
@蚕豆
私人示踪剂;
@蚕豆
私人跨度;
私有随机=新随机();
@以前
公共空间(SPAN){
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());
}
私有长createId(){
返回random.nextLong();
}

}
这是我的错误。模拟跨度的正确方法是:

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

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

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

Tracer根本不会嘲笑Finchley.SR2,因此我最终得出以下结论:

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

Tracer根本不会嘲笑Finchley.SR2,因此我最终得出以下结论:

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

你能提供一个跟踪或其他什么吗?目前,您在屏幕截图中显示了一种情况,即由于响应不能为null,因此无法抛出NPE。还有,你想嘲笑侦探是什么意思?请显示您的测试并显示导致抛出NPE的行。您好,上面有一个示例代码()的链接。没有可用的跟踪,但您可以尝试对这两个微服务运行单元测试,并查看发生了什么。在实际场景中,我需要模拟跟踪程序和Span,因为我不希望在单元测试中执行类似的代码时出现错误(String-traceIdString=spanAccessor.getCurrentSpan().traceIdString();)嗨,我知道我有跟踪程序,但您甚至没有编写如何运行或测试它。您没有指出任何课程等,请提供我要求的详细信息。否则我就帮不了你了:/好的,对不起。如果您在查看代码时运行测试(ServiceTest2.java和ServiceTest.java)类,并且这些测试是集成测试而不是单元测试,那么您可能会遇到这个问题。我也没有看到任何嘲弄。你能告诉我你在哪里模仿代码吗?你能提供一个stacktrace或其他什么吗?目前,您在屏幕截图中显示了一种情况,即由于响应不能为null,因此无法抛出NPE。还有,你想嘲笑侦探是什么意思?请显示您的测试并显示导致抛出NPE的行。您好,上面有一个示例代码()的链接。没有可用的跟踪,但您可以尝试对这两个微服务运行单元测试,并查看发生了什么。在实际场景中,我需要模拟跟踪程序和Span,因为我不希望在单元测试中执行类似的代码时出现错误(String-traceIdString=spanAccessor.getCurrentSpan().traceIdString();)嗨,我知道我有跟踪程序,但您甚至没有编写如何运行或测试它。您没有指出任何课程等,请提供我要求的详细信息。否则我就帮不了你了:/好的,对不起。如果您在查看代码时运行测试(ServiceTest2.java和ServiceTest.java)类,并且这些测试是集成测试而不是单元测试,那么您可能会遇到这个问题。我也没有看到任何嘲弄。你能告诉我你在哪里模仿代码吗?