簡體   English   中英

在Mockito中獲取NullpointerException

[英]Getting NullpointerException in 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));
}

我得到空指針異常,消息作為null,即使我明確設置值?

這里:

在調用生產代碼時傳遞mockRequest

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

你的生產電話會:

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

所以唯一的mockRequest是: mockRequest是空的!

所以,首先要確保傳遞的變量不為 null; 喜歡:

Request mockedRequest = mock(Request.class);

或者,如果mockedRequest是測試類中的字段,請使用@Mock注釋。

最重要的是; 你可能想做一些模擬規范,比如:

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

但除此之外,您缺少Java的許多基礎知識:

  • 命名約定:變量名稱為camelCase,與entityResponse類似。 通常,測試命名為testCatEnter來表示測試的方法。
  • 你有演員......他們不需要。
  • 你有相當多的代碼......它是未使用的,就像測試方法中的mes聲明一樣。

長話短說:我覺得你自己負擔過重了。 首先要學習基礎知識; 然后去找先進的Mockito東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM