java - 在java中的测试类中没有得到响应

标签 java servlets mockito testcase

我正在使用 mockito 为 servlet 编写测试用例。

在 servlet 中响应是使用 servletoutputstream 设置的。

我发送请求,servlet 工作正常,也在控制台中提供输出,但在测试类中我没有上课。 下面是设置响应的代码:

protected void commitResponseBuffer(String buffer, ServletResponse response) throws IOException 
{
    response.setContentType("text/plain");
    System.out.println("Uncompressed Response Buffer : Size = " + buffer.length());
    // write to ZipOutputStream
    ByteArrayOutputStream bos = new ByteArrayOutputStream ();
    ZipOutputStream out = new ZipOutputStream(bos);
    out.putNextEntry(new ZipEntry("response.txt"));
    out.write(buffer.getBytes("UTF-8"));
    //out.flush();
    out.closeEntry();
    out.close ();
    bos.close();
    // encode to Base64 string
    String b64String = Base64.encodeBase64String(bos.toByteArray());
    // set the response
    ServletOutputStream servletOut = response.getOutputStream();
    response.setContentLength(b64String.length());
    System.out.println("Compressed Response Buffer : Size = " + b64String.length());
    servletOut.print(b64String);
    System.out.println(b64String);
    servletOut.close();
}

在测试课上

    when(response.getOutputStream()).thenReturn(servletOut);
    new xlCollaborationService().service(request, response);        
    System.out.println("Response Buffer in mock :"+response.getContentType());

谁能建议我如何阅读测试课上的回复??? 提前致谢。

最佳答案

看来您的方向是正确的。

您可以使用 Mockito 的 ArgumentCaptor 来捕获传递给模拟的参数并“捕获”值。 Documentation here

    ServletResponse response = mock(ServletResponse.class);
    ServletOutputStream servletOut = mock(ServletOutputStream.class);
    when(response.getOutputStream()).thenReturn(servletOut);

    new xlCollaborationService().service(request, response);

    // Capture argument
    ArgumentCaptor<String> bufferCaptor = ArgumentCaptor.forClass(String.class);
    verify(servletOut).print(bufferCaptor.capture());

    String responseBody = bufferCaptor.getValue();
    System.out.println(responseBody);

关于java - 在java中的测试类中没有得到响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50040127/

相关文章:

java - 为什么我在 try catch JSP 输出时无法包装 ServletRequest

Spring:无法将模拟注入(inject)到使用 @Aspect 注释的类中

java - 如何计算使用 Junit 和 Mockito 调用某个方法的次数?

Java - 高效的集合管理

java - 在 Controller 外部获取 JPA 事务 - Play Framework

java - 如何使用全局方法安全性的分层决策投票器

java - jsp/servlet页面的问题

java - 警告 : Establishing SSL connection without server's identity verification is not recommended

java - 如何使用 thenReturn 上课?

Java泛型——获取泛型参数的实际类型