spring mvc Web アプリの統合テスト時に、フォーム オブジェクト全体をモック リクエストで渡す方法はありますか? 私が見つけることができるのは、次のように各フィールドをパラメーターとして個別に渡すことだけです。
mockMvc.perform(post("/somehwere/new").param("items[0].value","value"));
小さなフォームにはこれで十分です。しかし、投稿されたオブジェクトが大きくなるとどうなるでしょうか? また、オブジェクト全体を投稿できれば、テスト コードの見栄えも良くなります。
具体的には、チェックボックスで複数のアイテムを選択してから投稿することをテストしたいと思います。もちろん、単一のアイテムをテスト投稿することもできましたが、疑問に思っていました..
spring-test-mvc が含まれている spring 3.2.2 を使用しています。
フォームの私のモデルは次のようになります。
NewObject {
List<Item> selection;
}
私はこのような呼び出しを試みました:
mockMvc.perform(post("/somehwere/new").requestAttr("newObject", newObject)
次のようなコントローラーに:
@Controller
@RequestMapping(value = "/somewhere/new")
public class SomewhereController {
@RequestMapping(method = RequestMethod.POST)
public String post(
@ModelAttribute("newObject") NewObject newObject) {
// ...
}
しかし、オブジェクトは空になります(はい、テストで以前に入力しました)
私が見つけた唯一の有効な解決策は、次のように @SessionAttribute を使用することでした: Spring MVC アプリケーションの統合テスト: フォーム
しかし、これが必要なすべてのコントローラーの最後で complete を呼び出すことを忘れないようにしなければならないという考えは嫌いです。すべてのフォーム データがセッション内にある必要はないので、必要なのは 1 つの要求だけです。
したがって、私が今考えることができる唯一のことは、MockHttpServletRequestBuilder を使用してすべてのオブジェクト フィールドをリフレクションを使用して .param として追加するか、テスト ケースごとに個別に追加する Util クラスを作成することです。
わかりません、直感的ではないと感じました..
いいねを簡単にする方法についての考え/アイデアはありますか? (コントローラーを直接呼び出すだけでなく)
ありがとう!