java - 如何模拟兼容apache common的ServletFileUpload的HTTP请求?

标签 java unit-testing web-applications apache-commons-fileupload

我目前正在尝试测试 Web 应用程序中的一些代码,该应用程序接受 HTTP 多部分/表单请求并将其转换为稍后可以使用的 FileItems 列表。方法如下:

private HttpServletRequest request = null;
private List<FileItem> uploadedObjects = null;

/* getter/setter methods */

public void upload() throws FileUploadException {
    ServletFileUpload upload = new ServletFileUpload(
        new DiskFileItemFactory());

    if (request == null) {
        //do nothing - success is already false
    } else if (ServletFileUpload.isMultipartContent(request)) {
        uploadedObjects = upload.parseRequest(request);
        success = true            
    }
}

问题是我在对该方法进行单元测试时遇到问题。我尝试使用 EasyMock 来模拟 HttpServletRequest,但是为了模拟 ServletInputStream 的 read 方法,您基本上必须重新实现 read() —— 必须有一种更简单的方法。

我尝试使用 commons-httpclient 3.0 创建一个多部分请求,它成功地创建了一个 MultipartRequestEntity,但我不确定如何在 upload() 中使用它,因为它涉及两种不同的对象类型。是否可以?我可以采取哪些步骤来成功模拟请求对象?

最佳答案

看起来您的问题是 ServletFileUpload 正在该方法中构造和使用,因为该类是固有的依赖项,不在此类中。我建议重载 upload 方法以删除 ServletFileUpload 依赖项:

public void upload() throws FileUploadException {
  ServletFileUpload servletUpload = new ServletFileUpload(new DiskFileItemFactory());
  upload(servletUpload);
}

public void upload(ServletFileUpload servletUpload) throws FileUploadException{
  if (request == null) {
    //do nothing - success is already false
  } else if (ServletFileUpload.isMultipartContent(request)) {
    uploadedObjects = servletUpload.parseRequest(request);
    success = true            
  }
}

然后,使用 EasyMock 生成 ServletFileUpload 的模拟,并预期调用 parseRequest,返回 FileItem 类型的列表。在针对 upload(ServletFileUpload servletUpload) 方法的单元测试中使用该模拟。

关于java - 如何模拟兼容apache common的ServletFileUpload的HTTP请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6700464/

相关文章:

java - 如何从 SOAP Web 服务获取图像

java - 如何从消息数组中删除项目

java - 当有请求正文时模拟 WebClient 帖子

php - 拉维尔 5 : Model->fill() ignores $fillable property in unit tests

ios - 你如何在 Swift 中编写模拟?

java - 为不同于 JVM 的 war 设置语言环境?

java - Java 异常处理的良好实践

java - 如何使用 Apache PdfBox 获取 PDF 文件中的书签页码?

java - JDK 7u10 和 BlackBerry WebWorks SDK 安装问题

java - 在网络应用程序或桌面应用程序内的框架中重用 android 代码( native Java)