Как имитировать HTTP-запрос, совместимый с ServletFileUpload apache common? - PullRequest
1 голос
/ 15 июля 2011

В настоящее время я пытаюсь протестировать некоторый код, который у меня есть, в веб-приложении, которое принимает HTTP-запрос multipart / form и преобразует его в список 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 () - должен быть более простой способ.

Я пытался использовать commons-httpclient 3.0 для создания многокомпонентного запроса, и это сработало в том, что я успешно создал MultipartRequestEntity, но я не уверен, как использовать это в upload (), поскольку он включает два разных типа объектов. Является ли это возможным? Какие шаги я могу предпринять, чтобы успешно смоделировать объект запроса?

1 Ответ

1 голос
/ 16 июля 2011

Похоже, что ваша проблема в том, что ServletFileUpload создается и используется в методе, поскольку этот класс является зависимой зависимостью не в этом классе. Я бы предложил перегрузить метод загрузки, чтобы удалить зависимость 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. Используйте этот макет в модульном тесте для метода загрузки (ServletFileUpload servletUpload).

...