さっしーブログ

埼玉県在住のシステムエンジニアです。基本的には技術的な内容を中心に発信していきます。

SpringBootでControllerのユニットテストを行う

目次

1.実装概要

SpringBootで開発を行ったときにコントローラーの単体テストをしたかったため、MockMvcBuildersとMockMvcRequestBuilders、PowerMockを利用してコントローラーのテストを行ったときのメモ。

基本的にはテストデータと想定の結果を用意して、コントローラーのモックを作成して呼び出す。

また、コントローラー内でスタブ化したい部分(特に外部と通信したりしている部分)があればMockItoでモック化してテストケースを記述してあげれば良い。

あと、コントローラーをモック化するために@InjectMocksの付与も忘れずに。

2.実装内容

以下にサンプルコードを掲載します。

SampleTest.java
@InjectMocks
private Controller controller;

@Before
public void setup() {

     this.mockMvc = MockMvcBuilders.standaloneSetup(this.controller).build();

}

@Test
public void testController() {

     //*****************************************************
     // テストデータ用意
     //*****************************************************

     MultiValueMap<String, String> paramMap = new LinkedMultiValueMap<String, String>();
     paramMap.add("test1", "test1234@example.com");
     paramMap.add("test2", "test太郎");
     paramMap.add("test3", "test株式会社");
     paramMap.add("test4", "https://www.google.co.jp/");

     //*****************************************************
     //Mockの設定
     //*****************************************************

     // 必要であればやるかんじ
     // mockitoを使用する場合はクラスに@PowerMockIgnore() や@PrepareForTest()のアノテーション設定も忘れずに

     //*****************************************************
     //想定結果の設定
     //*****************************************************

     Map<String, Object> expectJson = new LinkedHashMap<String, Object>();
     expectJson.put("code", "200");
     expectJson.put("message", "OK");

      //*****************************************************
     // テスト対象呼び出し
     //*****************************************************

     try {

          this.mockMvc
          .perform(MockMvcRequestBuilders
          .get("/api/tests/123456").params(paramMap))
          .andExpect(status().isOk())
          .andExpect(content().json(mapper.writeValueAsString(expectJson)));

     } catch (Exception e) {

          fail("テスト失敗");

     }
}

以上