フォーム提出を処理する私のメソッドのいずれかの統合テストを書こうとしていません。 問題は、コントローラの@RequestMapping
に@PathVariable int id
を使用していることです。 テストメソッドが.handle()の部分に到達すると、次のエラーメッセージが表示されます。春@PathVariable統合テスト
nested exception is java.lang.IllegalStateException: Could not find @PathVariable [id] in @RequestMapping
したがって、コントローラはIDに到達できません。私はrequest.setRequestURI("/url-" + s.getId());
を使用していますが、それほど嬉しいことに、@PathVariable
の設定には役立っていません。 Mockオブジェクトの@PathVariable
を設定する方法はありますか?
アップデート:私のテストクラスでMockHttpServletRequest
とannotationMethodHandlerAdapter.handle
をuseing
ええ、イム。
コントローラー:
@RequestMapping(method = RequestMethod.POST, params = {"edit" })
public String onSubmit(@ModelAttribute("sceneryEditForm") SceneryEditForm s,
@PathVariable int id, Model model) {
// some code that useing id
}
試験方法:
@Test
public void testEditButton() throws Exception {
MyObject s = new MyObject();
request.setMethod("POST");
request.setRequestURI("/edit-" + s.getId());
request.setParameter("edit", "set");
final ModelAndView mav = new AnnotationMethodHandlerAdapter()
.handle(request, response, controller);
assertViewName(mav, "redirect:/view-" + s.getId());
}
メソッドの定義(テストではなく、ソース)を投稿できますか? –
コンタクターとテストを投稿してください。私はあなたのテストでMockHttpServletRequestとannotationMethodHandlerAdapter.handleを使用していると仮定します。 – chrislovecnm
サンプルコードを使用して質問を更新しました。 – Sorex