2016-07-27 14 views
2

アイテムについての情報を取得し、それを保持するRequestMappingをテストしたい場合は、イメージをアップロードすることもできます。ただし、イメージのアップロードは必須ではなく、私のHTMLフォームはenctype="multipart/form-data"を使用しています。私は、コントローラは次のようになり、実際には任意のファイルをアップロードしなくても、コントローラをテストしようとしています:ファイルをアップロードせずにMockMvcでテストしようとすると、現在のリクエストはマルチパートリクエストではありません。

@RequestMapping(value="/admin/upload", method=RequestMethod.POST) 
public ModelAndView addItem(
     @RequestParam(value="id", required=true) Integer id, 
     @RequestParam(value="name", required=true) String name, 
     @RequestParam(value="image", required=false) MultipartFile file, 
     ) throws IOException { 

    // some stuff here 

    ModelAndView mov = new ModelAndView(); 
    return mov; 

} 

私は不足しているパラメータの問題を取得していますfalseするrequiredフラグを設定し、より多くのしたにも関わらず、重要なのは、mockMvcリクエストでヘッダーを送ることができます。これにより、画像をアップロードする必要なくこのマッピングをテストできます。マルチパートリクエストのために

mockMvc.perform(post("https://localhost/store-admin/items/itemAddSubmit") 
      .param("id", 1) 
      .param("name", "testname").with(csrf())) 
      .andDo(print()); 

答えて

1

あなたはfileUpload方法の代わりに、getpostまたは何を使用する必要があります。

次のようにコードを更新 -

mockMvc.perform(fileUpload("https://localhost/store-admin/items/itemAddSubmit") 
      .param("id", 1) 
      .param("name", "testname").with(csrf())) 
      .andDo(print()); 

を実際に下記のようにfileUploadfile機能を使用したファイルを送信するには -

myMockMultipartFileMockMultipartFileオブジェクトです
mockMvc.perform(fileUpload("https://localhost/store-admin/items/itemAddSubmit") 
      .file(myMockMultipartFile) 
      .param("id", 1) 
      .param("name", "testname").with(csrf())) 
      .andDo(print()); 

+0

ありがとうございます。私は、 'fileUpload'リクエストタイプがあることに気付きませんでした。 – px06

+0

残念ながら、この同じ形式を使用すると、パラメータが存在しないことを示しています(この場合は "ファイル"になります)。おそらく、私が正しく表現していないものがありますか?あなたの答えを拡大することは非常に役に立ちます。ありがとう。 – degreesightdc

+0

@degreesightdcすべての引数を渡していますか?あなたがエラーstacktraceと他の関連する詳細で自分の質問を開始する方が良いでしょう。 –

0

に注意することは非常に重要 - [ファイルを受け付け@RequestParam]あなたのRESTエンドポイントでは、「value=」属性が設定されていない場合は、模擬テストを実行しているとき、それはまた、エラーの同じタイプをスローします。 prodでソリューションを実行するときに "value"属性を無視してエラーが発生しないようにすることもできますが、そうすることでテストを実行してプログラムでファイルを注入することができなくなります。

例:

@RequestParam(value="file") final MultipartFile file, 

あなたの質問はすでに適切にこれを示したが、私は、私のような、そのような小さな細部を見落とすことがあり、将来のユーザーに対してこの回答を文書化します。

乾杯

関連する問題