Mock測試用例


近期在重構一些舊項目,看到之前同事編寫的測試用例是使用注入SpringJUnit4ClassRunner 直接注冊實現層然后測試需要操作的方法是否可運行。雖然這樣說是可以達到測試的想法。但是如果要使用在入口的業務控制層,還要有預期的測試結果,那豈不是要寫一大堆邏輯來驗證了。。因此使用該方案是很笨重的,測試起來也麻煩。然而bug率還是沒降低多少。。

因此引入mock來進行改造該測試用例,以業務控制層為切入點,斷言預判是否符合結果。這樣就達到測試的效果了。

import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.junit.Before;
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 java.util.Map;

import static junit.framework.TestCase.assertNotNull;
import static org.assertj.core.api.Assertions.assertThat;

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
@Slf4j
public class ApplicationTests {


    @Autowired
    protected MockMvc mvc;

    @Before
    public void init() {
        assertNotNull(mvc);
    }

    @Test
    public void signParamsMock() {
        Map params = Maps.newHashMap();
        params.put("catalogId", "1");
        params.put("user", "user");

        try {
//業務控制層,URI請求 MvcResult result
= mvc.perform(MockMvcRequestBuilders.post("/colorfulPay/signParams", params)).andReturn();
//斷言預判結果是否返回包含true,若不符合,就拋出異常 assertThat(result.getResponse().getContentAsString()).contains(
"true"); log.info("result:{}", result.getResponse().getContentAsString()); } catch (Exception e) { e.printStackTrace(); } } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM