不寫單元測試的項目不是好項目,不寫單元測試的程序猿不是好測試,下面我們來看看SpringBoot怎麼整合測試,這裏只講controller的測試,其他層的測試很簡單,這裏就略過:
1.引入測試依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2.controller:
@Controller
public class HostMtController {
@ResponseBody
@RequestMapping("/returnSelf")
public String returnSelf(String str) {
return str;
}
@ResponseBody
@RequestMapping("/getstr")
public String getString() {
return "Str";
}
}
3.在 src/test/java/ 下創建測試類HostMtControllerTest(這裏要注意測試類的名稱爲待測試類的名稱+Test)
@RunWith(SpringRunner.class)
// 指定啓動類
@SpringBootTest(classes = { HostMtApp.class })
@AutoConfigureMockMvc
/*
* 使 用@SpringBootTest()與@AutoConfigureMockMvc結合,
*
* @SpringBootTest使用@SpringBootTest加載測試的spring上下文環境,
*
* @AutoConfigureMockMvc自動配置MockMvc這個類
*/
public class HostMtControllerTest {
// 模擬MVC對象,通過MockMvcBuilders.webAppContextSetup(this.wac).build()初始化。
@Autowired
private MockMvc mvc;
// get 請求
@Test
public void testHome() throws Exception {
// 請求是否成功
mvc.perform(MockMvcRequestBuilders.get("/getstr")).andExpect(MockMvcResultMatchers.status().isOk());
// 返回是否符合預期
mvc.perform(MockMvcRequestBuilders.get("/getstr")).andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("Str"));
}
// post
@Test
public void testShow() throws Exception {
// 請求是否成功
mvc.perform(MockMvcRequestBuilders.get("/returnSelf").param("str", "400"))
.andExpect(MockMvcResultMatchers.status().isOk());
// 返回是否符合預期
mvc.perform(MockMvcRequestBuilders.get("/returnSelf").param("str", "400"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("400"));
}
}
然後通過junit跑起來就OK了 !