2011-03-22 1 views
5

私はJUnitのテストを行うと、私はテストSpring MVCのコントローラにこのような何かを:spring mvc Controllerから送信されたResponseBodyまたはResponseEntityの単体テスト方法は?

コントローラテストは以下のようである
request.setRequestURI("/projects/"+idProject+"/modify"); 
ModelAndView mv = handlerAdapter.handle(request, response, controller); 

@RequestMapping(value = "{id}/modify") 
public String content(ModelMap model, @PathVariable("id") Project object) { 

しかし、私はResponseBodyを取得する方法を見つけることはありません

@RequestMapping("/management/search") 
public @ResponseBody ArrayList<SearchData> search(@RequestParam("q")) { 
     .... 
       .... 
     ArrayList<SearchData> datas = ....; 

     return datas; 
    } 
+0

私のケースでは別の解決策が見つかった:http://stackoverflow.com/questions/9138555/spring-framework-test-restful-web-service-controller-offline-ie-no-server- n実装が非常に簡単で、テストコードとうまく適合しているようです。 – emas

答えて

3

あなたの単体テストは私の戻り値の内容を確認する必要がありますthod:

ArrayList<SearchData> results = controller.search("value"); 
assertThat(results, ...) 

@ResponseBodyアノテーションは関係ありません。これは、注釈付きコントローラの大きな利点の1つです。ユニットテストは、フレームワークのメカニックではなく、ビジネスロジックに集中することができます。プレアノテーションコントローラでは、テストコードの半分がモックリクエスト、レスポンス、関連するグッビンを構築するのに費やされます。それは気晴らしです。

コードの注釈がフレームワークと適切に統合されているかどうかのテストは、統合テストまたは機能テストの仕事です。

+0

また、ResponseEntity結果の場合、getBodyを呼び出して結果を取得することができます。すなわちResponseEntity 結果= controller.search( "value"); MyObject obj = results.getBody(); assertThat(obj、...) – digitaljoel

+0

自分のブログにリンクするのが悪いのではないかと思います。 2月には、コントローラのテストに直接関係するエントリを書きました。 http://digitaljoel.nerd-herders.com/2011/02/05/mock-testing-spring-mvc-controller/とhttp://digitaljoel.nerd-herders.com/2011/02/05/using-mockito -to-test-spring-mvc-ajax-interaction /後者のテストでは、ResponseEntityを返すメソッドです。 – digitaljoel

+0

あなたの答えはスカフマンに感謝します。あなたは正しいです。戻り値の内容を確認するだけです。 – Nico

関連する問題