在Mockito中获取NullpointerException

时间:2017-02-07 12:59:49

标签: java nullpointerexception mockito

我有以下实际方法:

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

我得到空指针异常,消息变为空,即使我明确设置了值?

1 个答案:

答案 0 :(得分:0)

下面:

您在调用生产代码时传递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东西。