1 概述
SpringBoot 对测试提供了一些简化支持,只需要添加起步依赖即可使用:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2 以前的测试方式
SpringJUnit 支持,由此引入 Spring-Test 框架支持,通过这个注解让 SpringJUnit4ClassRunner 这个类提供 Spring 测试上下文
@RunWith(SpringJUnit4ClassRunner.class)
指定 SpringBoot 工程的 Application 启动类,通过这个注解加载和配置 Spring 应用上下文
@SpringApplicationConfiguration(classes = App.class)
由于是 Web 项目,Junit 需要模拟 ServletContext,因此需要给测试类加上 @WebAppConfiguration
@WebAppConfiguration
3 常见的第一种方式
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
@AutoConfigureMockMvc
这种方式下:直接
@Autowired
private MockMvc mockMvc;
然后就可以使用 mockMvc
1:@RunWith 里面,不再是 SpringJUnit4ClassRunner.class,而是 springboot 专门做的一个启动类 SpringRunner.class,当然,也可以使用 @RunWith(SpringJUnit4ClassRunner.class)
2:也不使用 @SpringApplicationConfiguration 了,使用 @SpringBootTest 来指定启动类,启动类上面就有配置的注解
3:还可以指定随机的端口
@SpringBootTest(classes = App.class,webEnvironment = WebEnvironment.RANDOM_PORT)
4:可以引入自定义的配置类
@Import(MyTestsConfiguration.class)
4 常见的第二种方式
1:如果没有 @AutoConfigureMockMvc,那么就需要
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
2:然后加上:
@Before
public void setup() {this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();}
然后就可以使用 mockMvc
5 常见的第三种方式:使用 TestRestTemplate
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class,webEnvironment = WebEnvironment.RANDOM_PORT)
直接注入:
@Autowired
private TestRestTemplate rest;
然后就可以直接使用 TestRestTemplate 了
6 其它
Springboot 还有一些专项的检查,比如:@DataJpaTest、@JdbcTest、@DataMongoTest、@RestClientTest、@JsonTest 等等