91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用MockMvc進行controller層單元測試

發布時間:2021-06-10 10:32:16 來源:億速云 閱讀:211 作者:小新 欄目:開發技術

這篇文章主要介紹了如何使用MockMvc進行controller層單元測試,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

看代碼吧~

package com.ieou.ms_backend.controller;
import com.google.gson.Gson;
import com.ieou.ms_backend.dto.account.CreateAccountReq;
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.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MockMvcBuilder;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.ResultMatcher;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.WebApplicationContext;
import static org.junit.Assert.*;
/**
 * created by wyz on 2019/5/6
 */
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class AccountControllerTest {
    @Autowired
    private WebApplicationContext wac;
    private MockMvc mockMvc;
    private String url = "/ms_backend/account/";
    @Before
    public void setUp() throws Exception{
        //初始化MockMvc對象
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
    }
    //GET 請求
    @Test
    public void accountList() throws Exception {
        MockHttpServletRequestBuilder mockHttpServletRequestBuilder = MockMvcRequestBuilders.get(url + "accountList")
                .param("companyName", "wang")
                .header("access_token", "accessToken");
        mockHttpServletRequestBuilder.accept(MediaType.APPLICATION_JSON)
                .contentType(MediaType.APPLICATION_JSON_UTF8);
        ResultActions resultActions = mockMvc.perform(mockHttpServletRequestBuilder);
        resultActions.andReturn().getResponse().setCharacterEncoding("UTF-8");
        resultActions.andExpect(MockMvcResultMatchers.status().isOk());
        resultActions.andDo(MockMvcResultHandlers.print());
    }
    @Test
    public void removeAccount() {
    }
    //post 請求  @RequestBody
    @Test
    @Transactional
    @Rollback() // 事務自動回滾,默認是true。可以不寫
    public void createAccount() throws Exception {
        CreateAccountReq req = new CreateAccountReq();
        MockHttpServletRequestBuilder mockHttpServletRequestBuilder = MockMvcRequestBuilders.post(url + "createAccount")
                .header("access_token", "accessToken");
        mockHttpServletRequestBuilder.accept(MediaType.APPLICATION_JSON)
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                .content(new Gson().toJson(req)); // post請求
        ResultActions resultActions = mockMvc.perform(mockHttpServletRequestBuilder);
        resultActions.andReturn().getResponse().setCharacterEncoding("UTF-8");
        resultActions.andExpect(MockMvcResultMatchers.status().isOk());
        resultActions.andDo(MockMvcResultHandlers.print());
    }
}

Spring-test 單元測試數據不自動回滾的解決方案

在使用JUnit做單元測試時,為了使測試數據不對數據庫造成污染,故選取了spring-test進行單元測試,但在進行dao層的測試時,發現save方法無法進行數據的自動回滾。

逐一進行檢查分析,事務也開啟了,并使用注解方式標記@RollBack(true),在控制臺中也打出了事務回滾的信息,但仍然不能自動回滾。

后來感覺是數據庫的原因,我的數據庫使用的是MySql,這就存在數據表的類型是否支持事務情況。

逐查閱MySql相關文檔,發現,InnoDB類型的表是支持事務的,而MyISAM是不支持事務的,立刻查看數據表類型,果然為MyISAM,改為InnoDB后,重新進行測試,問題得到解決。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何使用MockMvc進行controller層單元測試”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东乡县| 扎兰屯市| 永年县| 宜春市| 静乐县| 奈曼旗| 和平县| 宣威市| 福州市| 胶州市| 从化市| 什邡市| 思南县| 都江堰市| 澄城县| 饶阳县| 隆回县| 益阳市| 资中县| 南丰县| 吉首市| 临海市| 阿坝| 梅州市| 博客| 澄迈县| 湖南省| 东辽县| 岳池县| 昆明市| 河曲县| 广汉市| 博白县| 金平| 阜城县| 临汾市| 英德市| 新邵县| 汝南县| 芦山县| 吉首市|