1

私は現在、HTTPマルチパート/フォームリクエストを受け取り、後で使用できるFileItemのリストに変換するWebアプリケーションにあるコードをテストしようとしています。方法は次のとおりです。

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()で2つの異なるオブジェクトタイプが関係しているため、どのように使用するかわかりません。出来ますか?リクエストオブジェクトを正常にシミュレートするには、どのような手順を実行できますか?

4

1 に答える 1

1

そのクラスはこのクラス内ではなく固有の依存関係であるため、問題は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を使用して、FileItemタイプのリストを返すparseRequestへの期待される呼び出しを含むServletFileUploadのモックを生成します。upload(ServletFileUpload servletUpload)メソッドに対する単体テストでそのモックを使用します。

于 2011-07-15T21:05:20.160 に答える