Spring Boot 单元测试编写

1,358 阅读1分钟

单元测试

spring boot 版本为 2.2.5.RELEASE 代码如下

package com.daowei.springtest.api;

import org.hamcrest.Matchers;
import org.json.JSONObject;
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.mock.web.MockMultipartFile;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
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 java.nio.file.Files;
import java.nio.file.Paths;

@SpringBootTest
@RunWith(SpringRunner.class)
@AutoConfigureMockMvc
public class UserApiTest {

  @Autowired
  private MockMvc mockMvc;

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

  // get - url 路径参数
  @Test
  public void findUserTest() throws Exception {
    String json = "[{\"id\":111,\"createTime\":1579400718,\"creator\":null," +
        "\"editor\":null,\"isDeleted\":\"no\",\"lastTime\":1579401143000,\"user\":null," +
        "\"isAdmin\":null,\"name\":null,\"password\":null,\"phone\":null,\"role\":null,\"userName\":null," +
        "\"userStatus\":null,\"userType\":null}]";

    this.mockMvc.perform(MockMvcRequestBuilders.get("/user/find/{id}", 111))
        .andDo(MockMvcResultHandlers.print())
        .andExpect(MockMvcResultMatchers.status().isOk())
        .andExpect(MockMvcResultMatchers.content().json(json));
  }

  // get - ?id=111 方式请求
  @Test
  public void findUser0Test() throws Exception {
    String json = "[{\"id\":111,\"createTime\":1579400718,\"creator\":null," +
        "\"editor\":null,\"isDeleted\":\"no\",\"lastTime\":1579401143000,\"user\":null," +
        "\"isAdmin\":null,\"name\":null,\"password\":null,\"phone\":null,\"role\":null,\"userName\":null," +
        "\"userStatus\":null,\"userType\":null}]";

    this.mockMvc.perform(MockMvcRequestBuilders.get("/user/findById")
        .param("id", "111"))
        .andDo(MockMvcResultHandlers.print())
        .andExpect(MockMvcResultMatchers.status().isOk())
        .andExpect(MockMvcResultMatchers.content().json(json, true));
  }

  // post - json 格式数据
  @Test
  public void createUserTest() throws Exception {
    JSONObject obj = new JSONObject();
    obj.put("id", 3333);
    obj.put("name", "sweet");
    this.mockMvc.perform(MockMvcRequestBuilders.post("/user")
        .content(obj.toString())
        .contentType(MediaType.APPLICATION_JSON))
        .andDo(MockMvcResultHandlers.print())
        .andExpect(MockMvcResultMatchers.status().isOk())
        .andExpect(MockMvcResultMatchers.content()
            .string(Matchers.containsString("3333")));
  }

  // form-data 上传文件
  @Test
  public void uploadFileTest() throws Exception {
    String fileName = "longzhu0.jpg";
    String token = "123";

    this.mockMvc.perform(MockMvcRequestBuilders.multipart("/file/upload")
        .file(new MockMultipartFile("file", fileName, "text/plain", Files.readAllBytes(Paths.get(fileName))))
        .param("token", token))
        .andDo(MockMvcResultHandlers.print())
        .andExpect(MockMvcResultMatchers.status().isOk())
        .andExpect(MockMvcResultMatchers.content()
            .string(Matchers.containsString(fileName + "-" + token)));
  }
}