目次
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("テスト失敗"); } }
以上