junit-mock-controller

BaseTest

package com.xxxxx.xxx;

import org.codehaus.jackson.map.ObjectMapper;
import org.junit.runner.RunWith;
import org.springframework.http.HttpHeaders;
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.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;

import java.util.HashMap;
import java.util.Map;

/**
 * @description: 单元测试基类
 * @author: luohh
 * @time: 2022/4/14 16:09
 */

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath*:dubbo_config/*.xml", "classpath*:spring-jpa.xml"})
@WebAppConfiguration  //不用启动 Servlet 容器,就可以获取一个 Web 应用上下文
public class BaseTest {
    private static final ObjectMapper MAPPER = new ObjectMapper();
    protected Map<String,String> params = new HashMap<>();
    protected Map<String,String> headers = new HashMap<>();
    protected  MockMvc mockMvc;

    /**
     * POST请求
     * @param url
     * @return
     * @throws Exception
     */
    protected Map<String, String> postHttp(String url) throws Exception{
        MultiValueMap<String,String> multiValueParamMap = new LinkedMultiValueMap<>();
        if (params.size() > 0){
            multiValueParamMap.setAll(params);
        }
        HttpHeaders httpHeaders = new HttpHeaders();
        if (headers.size() > 0){
           for (String key :headers.keySet()){
               httpHeaders.set(key, headers.get(key));
           }
        }
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders
                .post(url)
                .params(multiValueParamMap)
                .headers(httpHeaders))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andReturn();
        mvcResult.getResponse().setCharacterEncoding("UTF-8");
        mvcResult.getResponse().setContentType("application/json;charset=UTF-8");
        String result = mvcResult.getResponse().getContentAsString();

        Map<String, String> map = MAPPER.readValue(result, Map.class);
        return map;
    }

    /**
     * GET请求
     * @param url
     * @return
     * @throws Exception
     */
    protected Map<String, String> getHttp(String url) throws Exception{
        MultiValueMap<String,String> multiValueParamMap = new LinkedMultiValueMap<>();
        if (params.size() > 0){
            multiValueParamMap.setAll(params);
        }
        HttpHeaders httpHeaders = new HttpHeaders();
        if (headers.size() > 0){
            for (String key :headers.keySet()){
                httpHeaders.set(key, headers.get(key));
            }
        }
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders
                .get(url)
                .params(multiValueParamMap)
                .headers(httpHeaders))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andReturn();
        mvcResult.getResponse().setCharacterEncoding("UTF-8");
        mvcResult.getResponse().setContentType("application/json;charset=UTF-8");
        String result = mvcResult.getResponse().getContentAsString();

        Map<String, String> map = MAPPER.readValue(result, Map.class);
        return map;
    }
}

Controller

 

package com.xxxxxx.xxx.web.controller;

import com.xxxxxx.xxx.BaseTest;
import com.xxxxxx.xxx.xx.service.UserService;
import com.xxxxxx.xxx.web.base.constants.Constants;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.powermock.api.support.membermodification.MemberMatcher;
import org.powermock.api.support.membermodification.MemberModifier;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import java.util.Map;

/**
 * @author luohh
 * @date 2023/12/20 15:30
 */
public class UserControllerTest extends BaseTest {

    private static final String REQUEST_URL_PREFIX = "/api/user";
    private String key = "5368C8B07450DE28F064BEDE4A96229C";
    private String token = "";
private String userId = "123456";
    @InjectMocks // 用于创建一个实例,调用其真实的方法
    private UserController userController;
    @Mock
    private UserService userService;

    @Before
    public void setup() throws Exception {
        MockitoAnnotations.initMocks(this);
        // 初始化mockMvc
        this.mockMvc = MockMvcBuilders.standaloneSetup(userController).build();
        token = "YrJKoFhDH2kazS2WjJbq8A==";
    }
    @Test
    public void testUserWithValidate() throws Exception {
        Mockito.when(userService.findByUserId(Mockito.anyLong())).thenReturn(null);
        params.put("userId",userId);
        headers.put("token",token);
        Map<String, String> map = postHttp(REQUEST_URL_PREFIX + "/authUser");
        Assert.assertEquals("用户已作废", map.get("message"));
        Mockito.when(userService.findByUserId(Mockito.anyLong())).thenReturn(new User());
        headers.clear();
        map = postHttp(REQUEST_URL_PREFIX + "/authUser");
        Assert.assertEquals("您没有权限调用该接口", map.get("message"));
        headers.put("token",token+1);
        map = postHttp(REQUEST_URL_PREFIX + "/authUser");
        Assert.assertEquals("权限校验失败", map.get("message"));
    }
}

相关推荐

  1. junit-mock-controller

    2023-12-23 00:46:07       60 阅读
  2. SpringMVC 4.3 nacos1.4 mock2.0 junit4.13 测试Controller

    2023-12-23 00:46:07       33 阅读
  3. junit-mock-dubbo

    2023-12-23 00:46:07       55 阅读
  4. <span style='color:red;'>JUnit</span>

    JUnit

    2023-12-23 00:46:07      53 阅读
  5. <span style='color:red;'>JUnit</span>

    JUnit

    2023-12-23 00:46:07      49 阅读
  6. <span style='color:red;'>Junit</span>

    Junit

    2023-12-23 00:46:07      47 阅读
  7. <span style='color:red;'>Junit</span>

    Junit

    2023-12-23 00:46:07      29 阅读
  8. <span style='color:red;'>Mock</span>.js

    Mock.js

    2023-12-23 00:46:07      59 阅读
  9. BST Mock

    2023-12-23 00:46:07       31 阅读
  10. Mock数据

    2023-12-23 00:46:07       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-23 00:46:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-23 00:46:07       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-23 00:46:07       82 阅读
  4. Python语言-面向对象

    2023-12-23 00:46:07       91 阅读

热门阅读

  1. Linux环境下通过journal命令查看和管理日志

    2023-12-23 00:46:07       60 阅读
  2. 基于粒子群算法的抽水蓄能电站优化调度研究

    2023-12-23 00:46:07       57 阅读
  3. C语言—每日选择题—Day61

    2023-12-23 00:46:07       56 阅读
  4. docker资源限制

    2023-12-23 00:46:07       60 阅读
  5. vue3.0 通用管理页面封装

    2023-12-23 00:46:07       51 阅读
  6. 若依前端引入外部icon

    2023-12-23 00:46:07       69 阅读
  7. 标签正则化和硬标签、软标签、单标签、多标签

    2023-12-23 00:46:07       61 阅读