1. 程式人生 > >SpringBoot入門系列:第七篇 Spring Boot的測試

SpringBoot入門系列:第七篇 Spring Boot的測試

Spring Boot的測試,和普通專案的測試類同,可以繼續使用我們熟悉的測試工具。當然,這裡的測試,主要還是後臺程式碼的測試。

主要需要注意的地方僅有三點:

1、依賴包的引入:pom.xml中僅依賴spring-boot-starter-test,它把相關的依賴全部引入。

2、在測試類上的註解,常用的註解有三個

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration

這三個註解,只要注意第二個註解括號內的Application.class就行,把它替換為專案的啟動類即可。

我們前面spring-boot-sample-mysql工程的啟動類為SpringBootSampleMysqlApplication,那麼測試類上的註解就是

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SpringBootSampleMysqlApplication.class)
@WebAppConfiguration

3、測試類的檔案結構,保持src/test/java和src/main/java結構一直,即:包+資料夾。

     如:com.example包service中類的測試,那麼在src/test/java也是建立com.example包,再在包下建立資料夾service.

注:由於我們測試的啟動類用的是專案的啟動類,所以Spring Boot專案的測試配置檔案任然用src/main/resources的。

下面貼兩個個測試類程式碼

1、服務類的

  1. package com.example.service;  
  2. import java.util.List;  
  3. import org.junit.Assert;  
  4. import org.junit.Test;  
  5. import org.junit.runner.RunWith;  
  6. import org.springframework.beans.factory.annotation.Autowired;  
  7. import org.springframework.boot.test.SpringApplicationConfiguration;  
  8. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
  9. import org.springframework.test.context.web.WebAppConfiguration;  
  10. import com.example.Application;  
  11. import com.example.domain.TestPOJO;  
  12. import com.example.dto.HotelDto;  
  13. @RunWith(SpringJUnit4ClassRunner.class)  
  14. @SpringApplicationConfiguration(classes = Application.class)  
  15. @WebAppConfiguration
  16. publicclass TestServicesTest {  
  17.     @Autowired
  18.     TestServices testServices;  
  19.     @Test
  20.     publicvoid testShow() {  
  21.         String expectedResult="hello world!";  
  22.         String result=testServices.show();  
  23.         Assert.assertTrue("資料一致", expectedResult.equals(result));  
  24.         Assert.assertFalse("資料不一致", !expectedResult.equals(result));  
  25.     }  
  26.     @Test
  27.     publicvoid testShowDao() {  
  28.         List<TestPOJO> testPOJOList=testServices.showDao(10);  
  29.         Assert.assertTrue("資料集不對", testPOJOList.size()==1);  
  30.         Assert.assertTrue("資料一致", testPOJOList.get(0).getName().equals("nice"));  
  31.     }  
  32.     @Test
  33.     publicvoid testFindByCountry() {  
  34.         List<HotelDto> testPOJOList=testServices.findByCountry("US");  
  35.         Assert.assertTrue("資料集不對", testPOJOList.size()==1);  
  36.         Assert.assertTrue("資料一致", testPOJOList.get(0).getCityName().equals("San Francisco"));  
  37.     }  
  38. }  
2、controller類的
  1. package com.example.controller;  
  2. import java.util.List;  
  3. import org.junit.Assert;  
  4. import org.junit.Before;  
  5. import org.junit.Test;  
  6. import org.junit.runner.RunWith;  
  7. import org.springframework.beans.factory.annotation.Autowired;  
  8. import org.springframework.boot.test.SpringApplicationConfiguration;  
  9. import org.springframework.http.MediaType;  
  10. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
  11. import org.springframework.test.context.web.WebAppConfiguration;  
  12. import org.springframework.test.web.servlet.MockMvc;  
  13. import org.springframework.test.web.servlet.MvcResult;  
  14. import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;  
  15. import org.springframework.test.web.servlet.setup.MockMvcBuilders;  
  16. import org.springframework.web.context.WebApplicationContext;  
  17. import com.example.Application;  
  18. import com.example.domain.TestPOJO;  
  19. import com.example.dto.HotelDto;  
  20. import com.example.service.TestServices;  
  21. import com.fasterxml.jackson.core.JsonProcessingException;  
  22. import com.fasterxml.jackson.databind.ObjectMapper;  
  23. @RunWith(SpringJUnit4ClassRunner.class)  
  24. @SpringApplicationConfiguration(classes = Application.class)  
  25. @WebAppConfiguration
  26. publicclass TestControllerTest {  
  27.     MockMvc mvc;  
  28.     @Autowired
  29.     WebApplicationContext webApplicationConnect;  
  30.     @Autowired
  31.     TestServices testServices;  
  32.     String expectedJson;  
  33.     @Before
  34.     publicvoid setUp() throws JsonProcessingException {  
  35.         mvc = MockMvcBuilders.webAppContextSetup(webApplicationConnect).build();  
  36.     }  
  37.     @Test
  38.     publicvoid testShow() throws Exception {  
  39.         String expectedResult = "hello world!";  
  40.         String uri = "/show";  
  41.         MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON))  
  42.                 .andReturn();  
  43.         int status = mvcResult.getResponse().getStatus();  
  44.         String content = mvcResult.getResponse().getContentAsString();  
  45.         Assert.assertTrue("錯誤,正確的返回值為200", status == 200);  
  46.         Assert.assertFalse("錯誤,正確的返回值為200", status != 200);  
  47.         Assert.assertTrue("資料一致", expectedResult.equals(content));  
  48.         Assert.assertFalse("資料不一致", !expectedResult.equals(content));  
  49.     }  
  50.     protected String Obj2Json(Object obj) throws JsonProcessingException {  
  51.         ObjectMapper mapper=new ObjectMapper();  
  52.         return mapper.writeValueAsString(obj);  
  53.     }  
  54.     @Test
  55.     publicvoid testShowDaoInt() throws Exception {  
  56.         List<TestPOJO> testPOJOList = testServices.showDao(10);  
  57.         expectedJson = Obj2Json(testPOJOList);  
  58.         String uri="/showDao?age=10";  
  59.         MvcResult mvcResult=mvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON)).andReturn();  
  60.         int status=mvcResult.getResponse().getStatus();  
  61.         String content=mvcResult.getResponse().getContentAsString();  
  62.         Assert.assertTrue("錯誤,正確的返回值為200", status == 200);  
  63.         Assert.assertFalse("錯誤,正確的返回值為200", status != 200);  
  64.         Assert.assertTrue("資料一致", expectedJson.equals(content));  
  65.         Assert.assertFalse("資料不一致", !expectedJson.equals(content));  
  66.     }  
  67.     @Test
  68.     publicvoid testShowDaoString() throws Exception {  
  69.         List<HotelDto> hotelDtoList=testServices.findByCountry("US");  
  70.         expectedJson = Obj2Json(hotelDtoList);  
  71.         String uri="/country/US";  
  72.         MvcResult mvcResult=mvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON)).andReturn();  
  73.         int status=mvcResult.getResponse().getStatus();  
  74.         String content=mvcResult.getResponse().getContentAsString();  
  75.         Assert.assertTrue("錯誤,正確的返回值為200", status == 200);  
  76.         Assert.assertFalse("錯誤,正確的返回值為200", status != 200);  
  77.         Assert.assertTrue("資料一致", expectedJson.equals(content));  
  78.         Assert.assertFalse("資料不一致", !expectedJson.equals(content));  
  79.     }  
  80. }  
controller類的,為了MockMvc,注入了WebApplicationContext。