Controllerによるユニットテスト

2289 ワード

概要


モジュールの統合テストを行う場合は、URLを入力してControllerをテストすることを希望し、サーバを起動してhttp clientを作成してテストを行うと、起動速度が遅く、テスト検証が不便で、ネットワーク環境に依存するなど、テストができなくなり、ControllerをテストできるようにMockMVCを導入することで解決できます.
概要MockMvcは、Httpリクエストのシミュレーションを実現し、ネットワークの形式を直接使用してControllerの呼び出しに変換することができ、テスト速度を速くし、ネットワーク環境に依存せず、検証ツールを提供し、リクエストの検証を統合し、便利にすることができます.
構成の実行
RunWith(SpringJUnit 4 ClassRunner.class):Spring Testコンポーネントを使用してユニットテストを行うことを示します.WebAppConfiguration:このAnnotateを使用すると、セルテスト中に実際にウェブサービスを開始し、ControllerのRest APIを呼び出し始め、セルテストが完了してからウェブサービスを停止します.ContextConfiguration:Beanのプロファイル情報を指定するには、いくつかの方法があります.この例では、ファイルパス形式を使用します.複数のプロファイルがある場合は、カッコ内の情報を1つの文字列配列に構成して表すことができます.基本フレームワーク
/**
 *  MockMVC 
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:**web-config.xml")
@WebAppConfiguration
public class MockMvcTest {
    private MockMvc mockMvc;

    @Autowired
    private WebApplicationContext webApplicationContext;

    @Before
    public void setUp() throws Exception {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }
}

テストロジック
Controller処理を確認した後、要求が成功したかどうか、返された内容に「{'foo':'bar'}」文字列が含まれているかどうかを確認します.
1 mockMvcはperformを呼び出し、controllerを呼び出す業務処理ロジック2 performはResultActionsを返し、操作結果を返し、ResultActionsを通じて統一的な検証方式を提供した.3 StatusResultMatchersを使用して要求結果を検証する4 ContentResultMatchersを使用して要求が返された内容を検証する
/**
 *  MockMVC 
 * @author zhanyongzhi
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:**web-config.xml")
@WebAppConfiguration
public class MockMvcTest {
    private MockMvc mockMvc;

    @Autowired
    private WebApplicationContext webApplicationContext;

    @Before
    public void setUp() throws Exception {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

    @Test
    public void demo() throws Exception {
        mockMvc.perform(get("/demo/test").accept(MediaType.parseMediaType("application/json;charset=UTF-8")))
               .andExpect(status().isOk())
               .andExpect(content().contentType("application/json;charset=UTF-8"))
               .andExpect(content().json("{'foo':'bar'}"));
    }
}