單元測試 @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。

推薦閱讀: