一個測試類包含下面兩個注解:
@RunWith(SpringRunner.class) @SpringBootTest
測試類中可直接注入接口:
@Resource
MyServerMgr myServerMgr;
在方法上加@Test表示它是個測試方法:
@Test public void query() { String result = myServerMgr.query(); log.info("test query result is {}.", result); //使用斷言判斷結果 assertEquals(result, "query result"); }
可以通過@Before和@After注解修飾的方法,來表示測試方法執行前和執行后的行為。
@Before public void setUp() throws Exception { log.info("Before setUp."); } @After public void tearDown() throws Exception { log.info("After tearDown."); }
至此一個簡單的單元測試就完成了。
Spring Mock MVC:模擬Servlet容器里的測試控制器。
下面部分介紹如何測試Spring Controller API。
Controller測試類需要額外增加@WebAppConfiguration注解:
@RunWith(SpringRunner.class) @SpringBootTest @WebAppConfiguration
需要在測試類中注入WebApplicationContext:
@Resource private WebApplicationContext webApplicationContext;
需要使用MockMvc模擬發送rest請求,所以需要定義MockMvc變量並在測試方法執行前初始化它:
private MockMvc mockMvc; @Before public void setUp() throws Exception { log.info("set mockmvc"); mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); // mockMvc = MockMvcBuilders.standaloneSetup(webApplicationContext).build(); }
需要說明的是,Mock MVC有兩種構建方式:
standaloneSetup:手工創建並配置的控制器。
webAppContextSetup:根據Spring應用程序上下文來構建Mock MVC。
我們采用webAppContextSetup方式。
使用@Test注解聲明測試方法:
@Test public void query() throws Exception { mockMvc.perform(get("/myapp")) .andExpect(status().isOk()) .andExpect(content().string("query result")); }
總結一下:
1、需要熟悉並掌握@RunWith(SpringRunner.class)、@SpringBootTest、@Before、@After、@Test幾個注解的用法。
2、測試服務端接口和測試Controller的不同是Controller需要額外的加載上下文並初始化MockMvc,並通過MockMvc模擬發送rest請求,通過斷言判定結果是否正確。