單元測試 @mock與@SpringBootTest的使用
在寫單元測試的過程中我們會發現需要測試的類有很多依賴,這些依賴的類或者資源又會有依賴,導致在單元測試代碼裡無法完成構建,我們應對的方法是Mock。
簡單的說就是模擬這些需要構建的類或者資源,提供給需要測試的對象使用。
一.單元測試工具mock使用
1.引入依賴包
2.mock測試類
二.springboot使用@SpringBootTest單元測試
1.引入依賴包
2.測試類
三.mock和@springBootTest區別
1.mock進行單元測試不依賴spring的bean定義文件
不需要啟動web服務,執行起來速度很快。
2.@springBootTest需要啟動服務
執行真正的操作,執行速度慢,當需要真正的dao層操作時可選此測試方式。
單元測試–SpringbootTest和MockMvc
SpringbootTest
基於Junit 的Test
import junit.framework.TestCase; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) //底層用junit的 SpringJUnit4ClassRunner @SpringBootTest(classes = {XdclassSpringbootApplication.class}) public class XdclassSpringbootApplicationTests { @Test public void testOne() { System.out.println("start test"); Assert.assertEquals(1,1); TestCase.assertEquals(1,2); } }
當然也可以使用 @Before 和 @After , 和 junit 的測試一樣。
啟動類是必須要有的。
當有多個 @Test 的方法,需要一起執行的時候, 執行 XdclassSpringbootApplicationTests 這個類的 run或debug。
Assert 和 TestCase 都是 斷言,用法一樣。
MockMvc類的使用和模擬Http請求
相關API:
perform
:執行一個RequestBuilder請求andExpect
:添加ResultMatcher->MockMvcResultMatchers驗證規則andReturn
:最後返回相應的MvcResult->Response
import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; @RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc public class MockMvcTestDemo { @Autowired private MockMvc mockMvc; @Test public void apiTest(){ try { MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/hello")) .andExpect(MockMvcResultMatchers.status().isOk()) .andReturn(); } catch (Exception e) { e.printStackTrace(); } } }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- SpringBoot單元測試使用@Test沒有run方法的解決方案
- Java Spring Boot實戰練習之單元測試篇
- SpringBoot項目中@Test不出現可點擊運行的按鈕問題
- Java單元測試Mockito的使用詳解
- 解決Spring boot 整合Junit遇到的坑