一般情况下,每个接口开发完成后,都要进行测试。这里就SpringBoot 的单元测试做一个简单的介绍。
一、引入test包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
一般情况下,使用idea新建SpringBoot项目时这个包会自动导入。
二、创建测试类
idea中可以自动生成测试类,如下:
以上创建方式都是百度上找的,我这边并没找到这些菜单,可能是工具的问题。手动创建。
使用到的注解
@RunWith(SpringRunner.class) ------表示进行spring单元测试,继承自SpringJUnit4ClassRunner类。
@SpringBootTest ------- 启动整个项目
@AutoConfigureMockMvc ------注入MockMvc,不过本例中没有用到
@Test -----加在测试方法上,直接启动单个方法。
@Before -----测试之前执行
@After ------测试方法之后执行
controller测试
测试方法非常简单,直接上源码。
package com.byk.rong.boke.controller;
import org.junit.After;
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.mock.web.MockHttpServletResponse;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
/**
* @Author: ykbian
* @Date: 2018/11/28 9:45
* @Todo:
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class DisplayWorksContrllerTest {
@Autowired
private DisplayWorksContrller displayWorksContrller;
private MockMvc mockMvc; // 专门模拟浏览器发出各种请求
// @Before
// public void init(){
// mockMvc = MockMvcBuilders.standaloneSetup(displayWorksContrller).build();
// }
/**
*@Author: ykbian
*@date_time: 2018/11/28 9:42
*@Description: 测试列表查询数据
*@param:
*/
@Test
public void menuList() throws Exception{
mockMvc = MockMvcBuilders.standaloneSetup(displayWorksContrller).build();
//发出get请求并指定参数
// get(请求地址).param(String,String) 有多少参数,就写多少个param
RequestBuilder getRequest = MockMvcRequestBuilders.get("/boke/project/list")
.param("createUser","da58e825db4e11e8bf1d52540033f252");
//获取结果和返回值
MvcResult result = mockMvc.perform(getRequest).andReturn();
MockHttpServletResponse response = result.getResponse();
//输出响应结果
System.out.println("响应结果:"+response.getContentAsString());
System.out.println("状态码:"+response.getStatus());
}
/**
*@Author: ykbian
*@date_time: 2018/11/28 10:03
*@Description: 测试删除
*@param:
*/
@Test
public void delete() throws Exception{
mockMvc = MockMvcBuilders.standaloneSetup(displayWorksContrller).build();
/**
* 注意: 这里虽然是删除操作,但是controller里面写的是post请求,因此发出的也是post请求
*/
RequestBuilder getRequest = MockMvcRequestBuilders.post("/boke/project/delete")
.param("id","18f45bd2dcee11e8bf1d52540033f259");
//获取结果和返回值
MvcResult result = mockMvc.perform(getRequest).andReturn();
MockHttpServletResponse response = result.getResponse();
//输出响应结果
System.out.println("响应结果:"+response.getContentAsString());
System.out.println("状态码:"+response.getStatus());
}
/**
*@Author: ykbian
*@date_time: 2018/11/28 10:03
*@Description: 测试修改
*@param:
*/
@Test
public void update() throws Exception{
mockMvc = MockMvcBuilders.standaloneSetup(displayWorksContrller).build();
RequestBuilder getRequest = MockMvcRequestBuilders.post("/boke/project/update")
.param("id","687926d1e33511e8bf1d52540033f252")
.param("projectName","测试内容");
//获取结果和返回值
MvcResult result = mockMvc.perform(getRequest).andReturn();
MockHttpServletResponse response = result.getResponse();
//输出响应结果
System.out.println("响应结果:"+response.getContentAsString());
System.out.println("状态码:"+response.getStatus());
}
/**
*@Author: ykbian
*@date_time: 2018/11/28 10:03
*@Description: 测试增加
*@param:
*/
@Test
public void insert() throws Exception{
mockMvc = MockMvcBuilders.standaloneSetup(displayWorksContrller).build();
RequestBuilder getRequest = MockMvcRequestBuilders.post("/boke/project/insert")
.param("projectName","测试内容01")
.param("pageAddress","E:\\preject\\stest");
//获取结果和返回值
MvcResult result = mockMvc.perform(getRequest).andReturn();
MockHttpServletResponse response = result.getResponse();
//输出响应结果
System.out.println("响应结果:"+response.getContentAsString());
System.out.println("状态码:"+response.getStatus());
}
// @After
// public void after(){
// System.out.println("哈哈,我就是测试一下");
// }
}
由于每个方法测试方法中都有一部分相同的代码,因此把这部分相同的代码提取出来,写在init()方法内。以下是分别是这两种方式的测试结果。(测试结果较多,只贴了列表查询操作的结果)
service测试
package com.byk.rong.boke.service;
import com.byk.rong.boke.entity.BokeDisplayWorks;
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;
/**
* @Author: ykbian
* @Date: 2018/11/28 9:17
* @Todo: 服务类测试
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class DisplayWorksServiceTest {
@Autowired
private DisplayWorksService displayWorksService;
@Test
public void selectByParams(){
BokeDisplayWorks bokeDisplayWork = new BokeDisplayWorks();
// bokeDisplayWork.setId("18f45bd2dcee11e8bf1d52540033f241");
bokeDisplayWork.setCreateUser("da58e825db4e11e8bf1d52540033f252");
List<BokeDisplayWorks> bokeDisplayWorks = displayWorksService.selectByParams(bokeDisplayWork);
System.out.println("========"+bokeDisplayWorks);
}
}
运行结果如下:
dao测试
和service测试一样,注入-->测试即可。
参考资料
https://www.imooc.com/article/264188