SpringBoot测试
单元测试(unit testing)
是指对软件中的最小可测试单元进行检查和验证,单元测试是在软件开发过程中要进行的最低级别的测试活动
Java里单元指一个类。
模拟测试(mock testing)
就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
这里我们创建一个父类,单元测试继承它即可 这里有四个注解
@RunWith(SpringRunner.class)
和
@SpringBootTest(classes = AssetApplication.class)
指在Spring环境下运行
@Transactional
启用事务
@Rollback
完成后进行回滚
package com.test;
import cn.com.topsec.ti.assetmanage.AssetApplication;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
/**
* 单元测试继承该类即可
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AssetApplication.class)
@Transactional
@Rollback
public abstract class Tester {}
单元测试的位置
Service测试
service层做单元测试,即注入Service对象.逐个对每个方法的输入输出做测试
Controller测试
Controller测试,即API测试,是模拟使用HTTP来测试所有接口,一套完备的单元测试会大大减少测试花费的时间
@AutoConfigureMockMvc
//@AutoConfigureMockMvc注解,该注解表示启动测试的时候自动注入 MockMvc
public class EmployeeControllerTest extends Tester {
@Autowired
protected MockMvc mockMvc;
@Test
public void list() throws Exception {
MvcResult result = mockMvc.perform(
MockMvcRequestBuilders.get("/xxxx/xxxxx")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.param("page","1")
.param("size","10")).andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print())
.andReturn();
}
}
@MockBean的使用
在实际开发中,我们自己写的Controller、Service很可能去调用别的同事或别的项目组写的Service、Mapper,对方可能只写了一个接口,没有实现(比如本例中我写的Mapper),这样是没法进行测试的。
Mock的作用:创建一个虚拟的对象替代那些不易构造或不易获取的对象。