web-dev-qa-db-ja.com

ファイルのみを指定してCommonsMultipartFileオブジェクトを作成する方法

CommonsMultipartFileオブジェクトをパラメーターとして受け取るjunitテストメソッドがあります。

FileItemオブジェクトを作成して、コンストラクターに渡すことができるようにしようとしています。

CommonsMultipartFile(org.Apache.commons.fileupload.FileItem fileItem)

そのために、DiskFileItemコンストラクターを使用してFileItemオブジェクトを作成しようとしています。

DiskFileItem(Java.lang.String fieldName, Java.lang.String contentType, boolean isFormField, Java.lang.String fileName, int sizeThreshold, Java.io.File repository)

しかし、これらのパラメーターのいずれかを渡す方法がわかりません。

私はこれらすべてをSpring3 MVCコントローラーで機能させていますが、junitテストを実行するには、メソッド2つのオブジェクトに合格する必要があります。 1つは次のようなUploadItemオブジェクトです。

import org.springframework.web.multipart.commons.CommonsMultipartFile;

public class UploadItem {
 private String fileName;
 private String filePath;
 private CommonsMultipartFile fileData;

 public String getFileName() {
  return fileName;
 }

 public void setFileName(String fileName) {
  this.fileName = fileName;
 }

 public String getFilePath() {
  return filePath;
 }

 public void setFilePath(String filePath) {
  this.filePath = filePath;
 }

 public CommonsMultipartFile getFileData() {
  return fileData;
 }

 public void setFileData(CommonsMultipartFile fileData) {
  this.fileData = fileData;
 }
}

SetFileData()メソッドには、src/test/resourcesディレクトリにファイルを指定して作成しようとしているCommonsMultipartFileオブジェクトが必要です。

ファイルを取得してFileItemオブジェクトを作成し、それをCommonsMultipartFileオブジェクトコンストラクターに渡す方法を知っている人はいますか?

ありがとう。不明な点がある場合は、お知らせください。SpringMVCファイルのアップロードについてはあまり詳しくありません。

14
wsams

より一般的なインターフェースを使用してください org.springframework.web.multipart.MultipartFile 。コマンド(UploadItem)のorg.springframework.web.multipart.commons.CommonsMultipartFileの代わりに。 (CommonsMultipartFileは、インターフェイスの1:1実装です)。

これで、モッククラス org.springframework.mock.web.MockMultipartFile を使用してCommonsMultipartFileのインスタンスを作成できます。 (これはspring-test.jarの要素です)。

次に、テストでのMultipartFileの作成は、キャストなしの1つのステートメントのみです。

MockMultipartFile mockMultipartFile = new MockMultipartFile(
       "test.txt",                //filename
       "Hallo World".getBytes()); //content
31
Ralph

これはどのように役立ちますか?リクエストに応じてファイルを設定しないでください。次のように使用する必要があります。

MultipartFile multipartFile = getMockCommonsMultipartFile(BULK_CSV);
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest();
request.addFile(multipartFile);
CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) request.getFile(BULK_CSV);

引数CommonsMultipartFileのメソッドを使用しています。そうでない場合は、MockMultipartFileを直接使用できます。

 private MultipartFile getMockCommonsMultipartFile(String name, String path) throws IOException {
        InputStream is = getClass().getResourceAsStream(path);
        MultipartFile multipartFile = new MockMultipartFile(name, name, "", is);
        return multipartFile;
    }