包结构规范
单元测试包结构和源码结构必须保持一致,如下图所示:
文件命名规范
单元测试文件名字是由“被测试文件名 + Test”组成,如下图所示
代码编写规范
基础单元测试类
被各个单元测试继承,代码如下
package com.cntest.su.demo;
import com.cntest.su.DemoApplication;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* Description: 基础测试类
* Date: 2018/3/7 14:23
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes =DemoApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public abstract class BaseTest {
}
Controller单元测试规范
Controller负责restful接口输出,测试包括post接口和get接口
接口测试参照以下代码
package com.cntest.su.demo.controller;
import com.cntest.su.demo.BaseTest;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.RequestBuilder;
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.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
/**
* Description: controller test demo
* Date: 2018/3/7 11:34
*/
public class DemoControllerTest extends BaseTest{
//@Autowired
private MockMvc mockMvc;
@Autowired
private WebApplicationContext wac;
@Before
public void setup(){
//MockMvcBuilders使用构建MockMvc对象 (项目拦截器有效)
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
//单个类 拦截器无效
// mockMvc = MockMvcBuilders.standaloneSteup(userController).build();
}
/**
* test hi interface
*
* @throws Exception
*/
@Test
public void testHi() throws Exception {
String name = "test";
// 1、get查一下接口
RequestBuilder request = get("/demo/hi").param("name", name);
mockMvc.perform(request)
.andExpect(status().isOk())
.andExpect(content().string("hi:" + name));
}
}
Service单元测试规范
service层负责业务逻辑的实现,单元测试规范参照以下代码
package com.cntest.su.demo.service;
import com.cntest.su.demo.BaseTest;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
/**
* Description: service unit test
* Date: 2018/3/7 14:23
*/
public class DemoServiceTest extends BaseTest {
@Autowired
private DemoService demoService;
@Test
public void testHi(){
String name = "test";
Assert.assertEquals(demoService.hi(name), "hi:" + name);
}
}
Dao单元测试规范
dao层负责数据的获取,单元测试参照以下代码
package com.cntest.su.demo.dao;
import com.cntest.su.demo.BaseTest;
import com.cntest.su.demo.entity.User;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;
/**
* Description: demo dao test
* Date: 2018/3/7 14:57
*/
@Transactional
public class UserDaoTest extends BaseTest {
@Autowired
private UserDao userDao;
@Test
@Rollback
public void testGet() {
userDao.insert(3, "AAA", 20);
User u = userDao.getById(3);
Assert.assertEquals(20, u.getAge().intValue());
Assert.assertEquals("AAA", u.getName());
}
}
源代码地址:https://gitee.com/xszhangmin/unit_test_demo/tree/master