我有以下实际方法:
public ResponseEntity<Message> catEnter(@PathVariable("catId") BigInteger catId, @RequestBody Catrequest catReq, HttpServletRequest request) throws CatDataException, InvalidCatExcecatption {
Message message = new Message();
try {
message = catManager.submitData(catReq.getMessage(), catId, request);
} catch (IOException e) {
throw new CatDataAppException(e.getMessage());
}
return (ResponseEntity<Message>) restResponse(message, request.getMethod());
// Getting null pointer exception in above line
}
我使用mockito作为我的测试代码,如下所示:
@Test
public void submitData() throws Exception {
Message mes = new Message();
mes.setCode("00");
mes.setMessage("hi");
ResponseEntity<Message> responseentity = ((ResponseEntity<Message>) catController.catEnter(BigInteger.valueOf(3431), catRequest, mockRequest));
}
即使我显式设置了值,我也遇到空指针异常,消息为空?
最佳答案
这里:
在调用生产代码时传递 mockRequest
:
ResponseEntity<Message> responseentity = ... catController.catEnter(... mockRequest));
您的生产调用会:
return (ResponseEntity<Message>) restResponse(message, request.getMethod());
所以唯一的结论是:mockRequest
为空!
因此,首先确保传递的变量不为空;像:
Request mockedRequest = mock(Request.class);
或者,如果 mockedRequest
是测试类中的字段,请使用 @Mock 注释。
除此之外;您可能想做一些模拟规范,例如:
when(mockedRequest.getMethod()).thenReturn( whatever )
但除此之外,您还缺乏许多 Java 的基础知识:
- 命名约定:变量名称采用驼峰式命名,如
entityResponse
。通常,测试的命名如testCatEnter
来表达所测试的方法。 - 您有强制转换...但不需要它们。
- 您有相当多的代码......未使用,例如测试方法中的
mes
声明。
长话短说:我有一种感觉,你正在让自己负担过重。首先学习基础知识;然后去寻找先进的 Mockito 东西。
关于java - 在 Mockito 中获取 NullpointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42090542/