2012-03-09 29 views
0

フォーム提出を処理する私のメソッドのいずれかの統合テストを書こうとしていません。 問題は、コントローラの@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を設定する方法はありますか?

アップデート:私のテストクラスでMockHttpServletRequestannotationMethodHandlerAdapter.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()); 
    } 
+3

メソッドの定義(テストではなく、ソース)を投稿できますか? –

+1

コンタクターとテストを投稿してください。私はあなたのテストでMockHttpServletRequestとannotationMethodHandlerAdapter.handleを使用していると仮定します。 – chrislovecnm

+0

サンプルコードを使用して質問を更新しました。 – Sorex

答えて

1

エラーが正しいです:あなたは、プレースホルダとパス式を追加する必要がid

変数パスがありませんid

@RequestMapping(value = "/something/{id}", 
       method = RequestMethod.POST, 
       params = {"edit" }) 
public String onSubmit(@ModelAttribute("sceneryEditForm") SceneryEditForm s, 
     @PathVariable int id, Model model) { 
    // some code that useing id 
} 
+0

ダング!助けてくれてありがとう!何とか私はGETsで@PathVariableを使用しました... – Sorex

関連する問題