#質問内容
MockMvcを使ってコントローラーのテストをしています。
viewにおいて同じURLにsubmitするボタンが複数あるとします。
下記の例のようにすれば、特定のsubmitボタンとControllerのメソッドを対応させることができると思います。
※「viewのボタンタグのname属性」と「Controllerの@PostMappingのparams」が対応。
こういった場合、削除ボタンを押したときのPOSTリクエストのテストはどうやって行うのでしょうか??(MockMvc使用を想定)
下記テストコードでは、content("delete")を指定してみましたが、ControllerのpostDeleteメソッドがうまく実行されませんでした。。。
どうぞよろしくお願いいたします。
java
1mockMvc.perform(post("/xxxxxx").content("delete")
View
html
1<form action="/xxxx" method="post" th:object="${form}"> 2 <input type="text" id="firstName" name="firstName" /> 3 <input type="text" id="lastName" name="lastName" /> 4 5 <button type="submit" name="delete">削除</> 6 <button type="submit" name="update">更新</> 7</form>
Controller
Java
1 @PostMapping(value="/xxxxxx", params="delete") 2 public String postDelete(@ModelAttribute @Validated Form form, 3 BindingResult bindingResult, 4 Model model) { 5 //バリデーションで間違いがあったときの処理。 6 if(bindingResult.hasErrors()) { 7 //何らかの処理 8 } 9 10 //バリデーションで間違いがあったときの処理。 11 //ある処理をし、formに処理結果を格納 12 13 //modelにformを登録。 14 model.addAttribute("form", form); 15 16 return "index";
ControllerTest(今回詰まっている箇所)
java
1 @Test 2 public void postDeleteメソッドのテスト() throws Exception{ 3 //テスト用Formを設定(自作メソッド使用) 4 Form dateForm = createForm("ファーストネーム", "ラストネーム"); 5 6 //Mock化したServiceのgetCount()の戻り値を1に設定 7 when(mockService.getCount()).thenReturn(1); 8 9 mockMvc.perform(post("/xxxxxx").content("delete").requestAttr("form", form)) 10 .andExpect(status().isOk()) 11 .andExpect(view().name("index")) 12 .andExpect(model().attribute("form", form)); 13 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。