纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

MockMvc controller层单元测试事务自动回滚 使用MockMvc进行controller层单元测试 事务自动回滚的完整案例

低调的小白   2021-06-10 我要评论
想了解使用MockMvc进行controller层单元测试 事务自动回滚的完整案例的相关内容吗低调的小白在本文为您仔细讲解MockMvc controller层单元测试事务自动回滚的相关知识和一些Code实例欢迎阅读和指正我们先划重点: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后重新进行测试问题得到解决

以上为个人经验希望能给大家一个参考也希望大家多多支持


相关文章

猜您喜欢

  • JS 堆栈 拷贝 详解JavaScript堆栈与拷贝

    想了解详解JavaScript堆栈与拷贝的相关内容吗lsgxeva在本文为您仔细讲解JS 堆栈 拷贝的相关知识和一些Code实例欢迎阅读和指正我们先划重点:javascript,堆栈,javascript,拷贝,js,堆栈,js,拷贝下面大家一起来学习吧..
  • vue3 setUp和reactive函数 详解vue3中setUp和reactive函数的用法

    想了解详解vue3中setUp和reactive函数的用法的相关内容吗平凡是最美荡气回肠在本文为您仔细讲解vue3 setUp和reactive函数的相关知识和一些Code实例欢迎阅读和指正我们先划重点:vue3,setUp函数,vue,reactive函数下面大家一起来学习吧..

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式