在寫單元測(cè)試的過(guò)程中我們會(huì)發(fā)現(xiàn)需要測(cè)試的類有很多依賴,這些依賴的類或者資源又會(huì)有依賴,導(dǎo)致在單元測(cè)試代碼里無(wú)法完成構(gòu)建,我們應(yīng)對(duì)的方法是Mock。
簡(jiǎn)單的說(shuō)就是模擬這些需要構(gòu)建的類或者資源,提供給需要測(cè)試的對(duì)象使用。
一.單元測(cè)試工具mock使用
1.引入依賴包
2.mock測(cè)試類
二.springboot使用@SpringBootTest單元測(cè)試
1.引入依賴包
2.測(cè)試類
三.mock和@springBootTest區(qū)別
1.mock進(jìn)行單元測(cè)試不依賴spring的bean定義文件
不需要啟動(dòng)web服務(wù),執(zhí)行起來(lái)速度很快。
2.@springBootTest需要啟動(dòng)服務(wù)
執(zhí)行真正的操作,執(zhí)行速度慢,當(dāng)需要真正的dao層操作時(shí)可選此測(cè)試方式。
單元測(cè)試--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); } }
當(dāng)然也可以使用 @Before 和 @After , 和 junit 的測(cè)試一樣。
啟動(dòng)類是必須要有的。
當(dāng)有多個(gè) @Test 的方法,需要一起執(zhí)行的時(shí)候, 執(zhí)行 XdclassSpringbootApplicationTests 這個(gè)類的 run或debug。
Assert 和 TestCase 都是 斷言,用法一樣。
MockMvc類的使用和模擬Http請(qǐng)求
相關(guān)API:
- perform:執(zhí)行一個(gè)RequestBuilder請(qǐng)求
- andExpect:添加ResultMatcher->MockMvcResultMatchers驗(yàn)證規(guī)則
- andReturn:最后返回相應(yīng)的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(); } } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/u014640414/article/details/90902942