JUnitでコントローラーに対しリクエストを投げて結果をテストしたい時があるかと思います。
以下のように、MockMvcクラスを使用することでコントローラーのテストが可能です。
(JUnit4の記法です)
テスト対象のコントローラー
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@RequestMapping(method = RequestMethod.GET, value = "/"
,produces="text/plain;charset=UTF-8")
@ResponseBody
public String index() {
return "Test";
}
}
テストクラス
import static org.junit.Assert.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.setup.MockMvcBuilders; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = Application.class) // SpringBootアプリケーションのエントリポイントのクラス public class TestControllerTest { // テスト対象のコントローラー @Autowired public TestController controller; public MockMvc mockMvc; @Before public void setup() { mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); } @Test public void test() { try { MvcResult results = mockMvc.perform( get("/") .param("value1", "1") // リクエストパラメータを追加できる .param("value2", "2") .param("value3", "3") .header("header key", "header value") // ヘッダー情報を追加できる .characterEncoding("UTF-8") // Controllerのレスポンスエンコーディングと合わせる必要がある ) .andDo(print()) // リクエスト情報をコンソールにprint .andReturn(); // リクエスト結果を返却 String res = results.getResponse().getContentAsString(); assertEquals("Test", res); } catch (Exception e) { e.printStackTrace(); fail("リクエスト中にエラー発生"); } } }