测试
- 加载测试专用属性
- 加载测试专用配置
- Web环境模拟测试
- 数据层测试回滚
- 测试用例数据设定
加载测试专用属性
1.在启动测试环境时可以通过properties参数设置测试环境专用的属性
@SpringBootTest(properties = {"test.prop=testValue1"})
public class PropertiesAndArgsTest {
@Value("${test.prop}")
private String msg;
@Test
void testProperties(){
System.out.println(msg);
}
}
♦优势:比多环境开发中的测试环境影响范围更小,仅对当前测试类有效
2.在启动测试环境时可以通过args参数设置测试环境专用的传入参数
@SpringBootTest(properties = args={"--test.prop=testValue2"})
public class PropertiesAndArgsTest {
@Value("${test.prop}")
private String msg;
@Test
void testProperties(){
System.out.println(msg);
}
}
加载测试专用配置
使用@Import注解加载当前测试类专用的配置
加载测试范围配置应用于小范围测试环境
@SpringBootTest
@Import(MsgConfig.class)
public class ConfigurationTest {
@Autowired
private String msg;
@Test
void testConfiguration(){
System.out.println(msg);
}
}
Web环境模拟测试
- 模拟端口
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class WebTest {
@Test
void test(){
}
}
- 虚拟请求测试
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//开启虚拟Mvc的调用
@AutoConfigureMockMvc
public class WebTest {
@Test
//注入虚拟MVC调用对象
void testWeb(@Autowired MockMvc mvc) throws Exception {
//创建虚拟请求,当前访问/books
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
//执行对应的请求
mvc.perform(builder);
}
}
- 虚拟请求状态匹配
@Test
void testStatus(@Autowired MockMvc mvc) throws Exception {
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
ResultActions action = mvc.perform(builder);
//设定预期值,与真实值进行比较,成功测试通过,失败测试失败
//定义本次调用的预期值
StatusResultMatchers status = MockMvcResultMatchers.status();
//预计本次调是成功的:状态200
ResultMatcher ok = status.isOk();
//添加预计值到本次调用过程进行匹配
action.andExpect(ok);
}
- 虚拟请求体匹配
@Test
public void testBody(@Autowired MockMvc mvc) throws Exception {
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
ResultActions action = mvc.perform(builder);
//设定预期值,与真实值进行比较,成功测试通过,失败测试失败
//定义本次调用的预期值
ContentResultMatchers content = MockMvcResultMatchers.content();
//定义预期执行结果
ResultMatcher result = content.string("springboot");
//使用本次真实执行结果与预期结果进行对比
action.andExpect(result);
}
- 虚拟请求体(json)匹配
@Test
public void testJson(@Autowired MockMvc mvc) throws Exception {
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
ResultActions action = mvc.perform(builder);
//设定预期值,与真实值进行比较,成功测试通过,失败测试失败
//定义本次调用的预期值
ContentResultMatchers content = MockMvcResultMatchers.content();
ResultMatcher result = content.json("{\"id\":1,\"name\":\"springBoot\",\"type\":\"springBoot\",\"description\":\"springBoot\"}");
//添加预计值到本次调用过程中进行匹配
action.andExpect(result);
}
- 虚拟请求头匹配
@Test
public void testContenType(@Autowired MockMvc mvc) throws Exception {
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
ResultActions action = mvc.perform(builder);
//设定预期值,与真实值进行比较,成功测试通过,失败测试失败
//定义本次调用的预期值
HeaderResultMatchers header = MockMvcResultMatchers.header();
ResultMatcher resultHeader = header.string("Content-Type", "application/json");
//添加预计值到本次调用过程中进行匹配
action.andExpect(resultHeader);
}
数据层测试事务回滚
- 为测试用例添加事务,SpringBoot会对测试用例对应的事务提交操作进行回滚
@SpringBootTest
@Transactional
public class DaoTest {
@Autowired
private BookService bookService;
}
- 如果想在测试中提交事务,可以通过@Rollback注解设置
@SpringBootTest
@Transactional
@Rollback(value = false)
public class DaoTest {
}
测试用例数据设定
- 测试用例数据通常采用随机值进行测试,使用SpringBoot提供的随机数为其赋值
testcase:
book:
id: ${random.int} #随机整数
id2: ${random.int(10)} #10以为随机数
type: ${random.int(5,10)} #5到10随机数
name: ${random.value} # 随机uuid
uuid: ${random.uuid} # 随机字符串,MD5字符串,32位
publishTime: ${random.long} # 随机整数(long范围)
- ${random.int} 表示随机数
- ${random.int(10)} 表示10以为的随机数
- ${random.int(5,10)} 表示5到10的随机数
- 其中()可以是任意字符例如[] ,!!均可以