spring 正在获取NullPointerException跟踪程序,currentSpan()为Null

icnyk63a  于 2023-04-28  发布在  Spring
关注(0)|答案(3)|浏览(192)

我试图为给定的类创建测试用例,并希望返回traceId值,但得到跟踪。currentSpan()为null。
这是我的班级

public class ConsumerService{

private final Tracer tracer;

@Autowired
private RequestService requestService;

public void consumerProductionRequest(DisclaimerRequest disclaimerRequest){
String traceId=tracer.currentSpan.context().traceId();
log.info(traceId);
if(disclaimerRequest.getReqId()==null){
disclaimerRequest.setReqId(UUID.randomUUID().toString());
}
}
}

//Test Class
@ExtendWith(MockitoExtension.class)
class ConsumerServiceTest{

@InjectMocks
ConsumerService consumerService;

@Autowired
Tracer tracer;

@Test
void Test(){
    Tracer tracer=Mockito.mock(Tracer.class);
    String traceId;
    Mockito.when(tracer.currentSpan().context.traceId()).thenReturn(traceId);
    DisclaimerRequest disclaimerRequest=new DisclaimerRequest();
    consumerService.consumerProductionRequest(disclaimerRequest);
}
}

为什么我有追踪器。currentSpan()null。我使用的是JUnit 5和New。请有人帮我解决这个问题。

3vpjnl9f

3vpjnl9f1#

在这里,在您的test类中:

@Autowired
Tracer tracer;

把它变成

@Mock
Tracer tracer;

(and将相应的导入添加到Mockito)。您希望Mockito创建一个模拟对象,然后将其插入到您的测试对象中。还要注意,测试方法本身重新定义了tracer,因此隐藏了您在类级别上所做的任何其他操作。因此,测试方法中的tracer规范不会对已经注入到测试对象中的模拟Tracer示例产生任何影响。

o2gm4chl

o2gm4chl2#

Tracer tracer=Mockito.mock(Tracer.class);
String traceId;
Mockito.when(tracer.currentSpan().context.traceId()).thenReturn(traceId);

tracer将被模拟,您可以在debug中看到它,或者只是简单地打印它。另外,每个方法都返回null,因为你没有指定哪个方法将返回值,因为spring context在单元测试中不起作用。在集成测试中,您可以自动连接它。

Mockito.when(tracer.getCurrentSpan()).thenReturn(someSpan);
Mockito.when(tracer.getCurrentSpan().getContext()).thenReturn(someContext);
String traceId;
Mockito.when(tracer.currentSpan().context.traceId()).thenReturn(traceId);

您必须模拟能够解决问题的getCurrentSpan和getContext方法。你也不能自动连接它,只能使用@Mock注解。Spring上下文在单元测试中不存在,所以它不会自动连接。Spring相关代码将无法工作。集成测试为您运行spring上下文,您可以自动连接它。

liwlm1x9

liwlm1x93#

这对我很有效

@BeforeAll
public static void setUp() {
    Tracing.newBuilder().build().tracer();
}

不需要使用@Mock

相关问题