モックを利用したコントローラのテスト方法

  •  
 
yokoe に投稿

タグ

概要

今回は、モックを使用したコントローラクラスのテスト方法についてサンプルと合わせて説明する。

モックを利用したコントローラのテスト方法

テスト対象のコントローラクラスが依存するクラスをモック化する場合のテスト方法を以下のサンプルで示す。

public class TicketSearchControllerMockTest {

    @InjectMocks<!--1-->
    Controller target;

    @Mock
    Service mockService;

    MockMvc mockMvc;<!--2-->

    @Before
    public void setUp() {

        mockMvc = MockMvcBuilders.standaloneSetup(target).build();<!--2-->
    }

    @Test
    public void test() throws Exception {

        when(mockservice.executeService(Mockito.any())).thenThrow(new exception("test exception"));

        // setup and run the test
        MvcResult result = mockMvc.perform(post("リクエストマップ")<!--3-->
                    // assert
                    .andExpect(status().is(200))
                    .andExpect(view().name("view名"))
                    .andReturn();

        assertThat(result.getModelAndView().getModelMap().get(modelに詰めたエラーメッセージのキー)).isEqual("test exception");
    }
}

1.@InjectMocksアノテーションを使用しテスト時にモックオブジェクトが自動的に代入されるようテスト対象の呼び出し処理に付与する。
2.@InjectMocksアノテーションを付与したテスト対象のコントローラを使用してMockMvcをセットアップする。
3.performメソッドから返されたResultActionsのandExpectメソッドで取得したMvcResultを使用して実行結果の妥当性を検証する。
・statusメソッド:HTTPステータスコードを検証
・viewメソッド:コントローラが返したView名を検証

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。