正在Mockito中获取NullpointerException



我有下面的实际方法:

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

我得到了null指针异常,消息变为null,甚至我显式设置了值?

此处:

您在调用生产代码时传递mockRequest

ResponseEntity<Message> responseentity = ... catController.catEnter(... mockRequest));

而你的生产电话是这样的:

return (ResponseEntity<Message>) restResponse(message, request.getMethod());

因此,唯一的结论是:mockRequest为空!

因此,首先要确保传递的变量是而不是null;类似:

Request mockedRequest = mock(Request.class);

或者,如果mockedRequest是测试类中的字段,则使用@Mock注释。

除此之外;你可能想做一些模拟规范,比如:

when(mockedRequest.getMethod()).thenReturn( whatever )

但除此之外,您还缺少许多Java的基本知识:

  • 命名约定:变量名采用camelCase,如entityResponse。通常,测试的名称类似于testCatEnter,以表示被测试的方法
  • 你有石膏。。。在不需要它们的地方
  • 你有相当多的代码。。。未使用的,如测试方法中的mes声明

长话短说:我有一种感觉,你让自己负担过重。首先学习基础知识;然后去吃高级的Mockito。

相关内容

  • 没有找到相关文章

最新更新