四时宝库

程序员的知识宝库

Java,SpringBoot,单元测试,测试Mapper、Service和Controller

SpringBoot测试Mapper

package com.what21.demo.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.what21.demo.model.Role;
import org.junit.After;
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.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RoleMapperTest {

    @Autowired
    private RoleMapper roleMapper;

    @Before
    public void testBefore(){
        System.out.println("testBefore()");
    }

    @Test
    public void testGet() {
        QueryWrapper<Role> queryWrapper = new QueryWrapper<Role>();
        List<Role> list = roleMapper.selectList(queryWrapper);
        System.out.println(list);
    }

    @After
    public void testAfter(){
        System.out.println("testAfter()");
    }

}

SpringBoot测试Service

package com.what21.demo.service;

import com.what21.demo.model.Role;
import org.junit.After;
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.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RoleServiceTest {

    @Resource
    private IRoleService roleService;

    @Before
    public void testBefore() {
        System.out.println("testBefore()");
    }

    @Test
    public void testGet() {
        List<Role> list = roleService.queryAll();
        System.out.println(list);
    }

    @After
    public void testAfter() {
        System.out.println("testAfter()");
    }

}

SpringBoot测试Controller

重点关注点:

MockMvc

MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。

测试时,SpringBoot无需启动,直接运行测试类即可。

测试代码:

Controller功能的具体实现,点击,这里一一对应的实现。

package com.what21.demo.controller;

import com.what21.demo.MyApplication;
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.http.MediaType;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
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.web.context.WebApplicationContext;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
@SpringBootTest(classes = MyApplication.class)
@AutoConfigureMockMvc
public class UrlParamTransferControllerTest {

    @Autowired
    private WebApplicationContext webApplicationContext;

    @Autowired
    private MockMvc mockMvc;

    @Before
    public void setUp() throws Exception {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

    @Test
    public void bean1Test() {
        // GET请求方式
        String url = "/urlParamTransfer/bean1";
        MockHttpServletRequestBuilder builder = get(url)
                .contextPath("")
                .contentType(MediaType.TEXT_PLAIN_VALUE)
                .param("id", "123")
                .param("name", "名称1")
                .param("name", "名称2")
                .param("date", "1995-09-15 12:12:12");
        try {
            // perform : 执行请求
            ResultActions resultActions = mockMvc.perform(builder);
            // 添加执行完成后的断言,期望的结果状态 200
            resultActions.andExpect(MockMvcResultMatchers.status().isOk());
            // 添加ResultHandler结果处理器
            resultActions.andDo(MockMvcResultHandlers.print());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void bean2Test() {
        // GET请求方式
        String url = "/urlParamTransfer/bean2";
        MockHttpServletRequestBuilder builder = get(url)
                .contextPath("")
                .contentType(MediaType.TEXT_PLAIN_VALUE)
                .param("id", "123")
                .param("name", "名称1")
                .param("name", "名称2")
                .param("date", "1995-09-15 12:12:12");
        try {
            // perform : 执行请求
            ResultActions resultActions = mockMvc.perform(builder);
            // 添加执行完成后的断言,期望的结果状态 200
            resultActions.andExpect(MockMvcResultMatchers.status().isOk());
            // 添加ResultHandler结果处理器
            resultActions.andDo(MockMvcResultHandlers.print());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void bean3Test() {
        // GET请求方式
        String id = "123";
        String name = "名称";
        String date = "1995-09-15 12:12:12";
        String url = "/urlParamTransfer/bean3/" + id + "/" + name + "/" + date;
        MockHttpServletRequestBuilder builder = get(url)
                .contextPath("")
                .contentType(MediaType.TEXT_PLAIN_VALUE);
        try {
            // perform : 执行请求
            ResultActions resultActions = mockMvc.perform(builder);
            // 添加执行完成后的断言,期望的结果状态 200
            resultActions.andExpect(MockMvcResultMatchers.status().isOk());
            // 添加ResultHandler结果处理器
            resultActions.andDo(MockMvcResultHandlers.print());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void bean4Test() {
        // GET请求方式
        String url = "/urlParamTransfer/bean4";
        MockHttpServletRequestBuilder builder = get(url)
                .contextPath("")
                .contentType(MediaType.TEXT_PLAIN_VALUE)
                .param("id", "123")
                .param("name", "名称1")
                .param("name", "名称2")
                .param("date", "1995-09-15 12:12:12");
        try {
            // perform : 执行请求
            ResultActions resultActions = mockMvc.perform(builder);
            // 添加执行完成后的断言,期望的结果状态 200
            resultActions.andExpect(MockMvcResultMatchers.status().isOk());
            // 添加ResultHandler结果处理器
            resultActions.andDo(MockMvcResultHandlers.print());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void bean5Test() {
        // GET请求方式
        String id = "123";
        String name = "名称";
        String date = "1995-09-15 12:12:12";
        String url = "/urlParamTransfer/bean5/" + id + "/" + name + "/" + date;
        MockHttpServletRequestBuilder builder = get(url)
                .contextPath("")
                .contentType(MediaType.TEXT_PLAIN_VALUE);
        try {
            // perform : 执行请求
            ResultActions resultActions = mockMvc.perform(builder);
            // 添加执行完成后的断言,期望的结果状态 200
            resultActions.andExpect(MockMvcResultMatchers.status().isOk());
            // 添加ResultHandler结果处理器
            resultActions.andDo(MockMvcResultHandlers.print());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void bean6Test() {
        // GET请求方式
        String url = "/urlParamTransfer/bean6";
        MockHttpServletRequestBuilder builder = get(url)
                .contextPath("")
                .contentType(MediaType.TEXT_PLAIN_VALUE)
                .param("id", "123")
                .param("name", "名称1")
                .param("name", "名称2")
                .param("date", "1995-09-15 12:12:12");
        try {
            // perform : 执行请求
            ResultActions resultActions = mockMvc.perform(builder);
            // 添加执行完成后的断言,期望的结果状态 200
            resultActions.andExpect(MockMvcResultMatchers.status().isOk());
            // 添加ResultHandler结果处理器
            resultActions.andDo(MockMvcResultHandlers.print());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接