spring-boot-starter-test有如下几个库:
序号 | 库名的解释 |
---|---|
1 | JUnit 5:兼容 JUnit 4,Java 应用程序单元测试的事实标准 |
2 | Spring Test 和 SpringBootTest:对Spring Boot应用程序的公共和集成测试支持 |
3 | AssertJ:流式断言库 |
4 | Hamcrest:匹配对象库 |
5 | Mockito:Java 模拟框架 |
6 | JSONassert:JSON 断言库 |
7 | JsonPath:JSON XPath |
因此,如果是Springboot项目,无需再重复引入Spring-Test包和Junit包,从Springboot 2.2.X开始版本为junit5。
@SpringBootTest
>:获取启动类,加载配置,寻找主配置启动类(被 @SpringBootApplication 注解的)
@RunWith(SpringRunner.class)
>:让JUnit运行Spring的测试环境,获得[Spring环境的上下文]的支持
使用Junit4需要以上两个注解,junit5仅需@SpringBootTest
2、SpringJUnit4ClassRunner与SpringRunner关系
部分人习惯使用SpringJUnit4ClassRunner,SpringRunner是继承自这个类的,两者没有区别
public final class SpringRunner extends SpringJUnit4ClassRunner {
public SpringRunner(Class<?> clazz) throws InitializationError {
super(clazz);
}
}
3、使用junit5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖排除说明:这个是JUnit5中为了支持使用JUint4所做的一个过度,也就是说,你只需要在你的JUnit4旧项目中添加这个依赖, 就能完美过渡,而不用修改之前代码。(如果要在大于springboot 2.2.x版本使用junit4,上述的依赖排除删掉,还需手动引入junit4的jar包因为2.2.x只有junit5依赖)
JUnit5结构:
Junit5 = JUnit Platform + JUnit JUpiter + JUnit Vintage
-
JUnit Platform: 这是Junit提供的平台功能模块,通过它,其它的测试引擎都可以接入Junit实现接口和执行。
-
JUnit JUpiter:这是JUnit5的核心,是一个基于JUnit Platform的引擎实现,它包含许多丰富的新特性来使得自动化测试更加方便和强大。
-
JUnit Vintage:这个模块是兼容JUnit3、JUnit4版本的测试引擎,使得旧版本的自动化测试也可以在JUnit5下正常运行。
如果是SpringBoot项目,使用Junit测试仅需Starter即可,2.2.x前为junit4,后为junit5,仅需一个starter依赖,除非要变更2.2.x为junit4,不需要排除j5->j4的依赖且需要引入j4依赖。