POM配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
spring-boot-starter-test
spring-boot-starter-test 作用是引入Spring Boot测试模块以及 JUnit, AssertJ, Hamcrest等常用测试库,具体如下:
- JUnit — The de-facto standard for unit testing Java applications.
- Spring Test & Spring Boot Test — Utilities and integration test support for Spring Boot applications.
- AssertJ — A fluent assertion library.
- Hamcrest — A library of matcher objects (also known as constraints or predicates).
- Mockito — A Java mocking framework.
- JSONassert — An assertion library for JSON.
- JsonPath — XPath for JSON.
常用注解
- @RunWith(SpringRunner.class) :运行Junit并支持Spring-test特性;
- @SpringBootTest: 为springApplication创建上下文并支持SpringBoot特性;
单元测试回滚@Transactional
单元个测试的时候如果不想造成垃圾数据,可以开启事物功能,记在方法或者类头部添加@Transactional注解即可,如下代码所示:
@RunWith(SpringRunner.class)
@SpringBootTest(classes={DataStudioServiceApplication.class})
@Transactional
public class TaskServiceImplTest {
}
如果想关闭回滚,只要加上@Rollback(false)注解即可。@Rollback表示事务执行完回滚,支持传入一个参数value,默认true即回滚,false不回滚,如下代码所示:
@Test
@Rollback(false)
public void name() {
}
Controller层测试
MockMvc实现了对Http请求的模拟,这样可以直接调用到Controller使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,使得请求的验证统一而且很方便。
@RunWith(SpringRunner.class)
@SpringBootTest
public class MVCTest {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void query() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.post("/test/query")
.accept(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print());
}
}
1、mockMvc.perform执行一个请求;
2、MockMvcRequestBuilders.post(“***“)构造一个请求;
3、ResultActions.andExpect对请求结果进行断言验证;
4、ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情,比如使用MockMvcResultHandlers.print()输出整个响应结果信息;
参考: