【问题标题】:Mockito: How do unit test void method java mockito?Mockito:如何对 void 方法 java mockito 进行单元测试?
【发布时间】:2019-04-15 01:12:37
【问题描述】:

我有以下代码要进行单元测试:

public class TransformarExcel
{

public TransformarExcel() {
    //Constructor
}
  public void validarEntero(HttpServletRequest request, HttpServletResponse response, Integer rowCount, String column, String value)
  {
    if (value.equals("0")) {
      generateErrorProcessingFile(request, response, ALERTDANGER, MSGCOLUMNA + column + MSGREGISTRO + rowCount + " no puede ser vacío.");
    }
  }

  public void generateErrorProcessingFile(HttpServletRequest request, HttpServletResponse response, String typeError, String messageError)
  {
      request.setAttribute("typeMessage", typeError);
      request.setAttribute("message", messageError);
      try {
          request.getRequestDispatcher("index.jsp").forward(request, response);
      } catch (ServletException|IOException ex) {
          Logger.getLogger(ServletTransformarExcelDesembolso.class.getName()).log(Level.SEVERE, null, ex);
      }
  }

我需要验证方法 validarEntero 或方法 generateErrorProcessingFile 是否正在执行,因为这两个方法都没有返回任何内容。

这是我做的:

@Test
final void testValidarEntero() throws IOException {

        ServletTransformarExcelDesembolso manager = Mockito.mock(ServletTransformarExcelDesembolso.class);
        ServletTransformarExcelDesembolso dato = new ServletTransformarExcelDesembolso(); 
        dato.validarEntero(null, null, null, null, "0");
        verify(manager, Mockito.timeout(1)).validarEntero(null, null, null, null, "0");} 

谢谢你:)。

【问题讨论】:

    标签: java mockito junit5


    【解决方案1】:

    您可以使用mockspy 对象来验证预期行为。

    @Test
    final void testValidarEntero() throws IOException {
    
        HttpServletRequest mockRequest = Mockito.mock(HttpServletRequest.class);
        Mockito.when(mockRequest.getRequestDispatcher(anyString())).thenReturn(Mockito.mock(RequestDispatcher.class));
    
        ServletTransformarExcelDesembolso dato = new ServletTransformarExcelDesembolso(); 
        dato.validarEntero(mockRequest, null, null, null, "0");
    
        verify(mockRequest, Mockito.times(1)).getRequestDispatcher("index.jsp");
    }
    

    【讨论】:

    • 当我这样做时,我收到以下错误:co.com.ias 的 java.lang.NullPointerExceptionat co.com.ias.bancolombia.transformarexcel.ServletTransformarExcelDesembolso.generateErrorProcessingFile(ServletTransformarExcelDesembolso.java:356) .bancolombia.transformarexcel.ServletTransformarExcelDesembolso.validarEntero(ServletTransformarExcelDesembolso.java:420) at test.java.src.ServletTransformarExcelDesembolsoTest.testValidarEntero(ServletTransformarExcelDesembolsoTest.java:159) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
    • 对不起,您还需要在请求模拟时添加一个 when 。由于 mockito 模拟默认返回 null 。这会导致您看到的 NPE。
    • Mockito.when(mockRequest.getRequestDispatcher(anyString())).thenReturn(mock(RequestDispatcher.class));
    猜你喜欢
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多