一、java 单元测试框架
java当前主流的测试框架有两个:JUnit、TestNG。
1、两者相同点
- 使用annotation,且大部分annotation相同。
- 都可以进行单元测试(Unit test)。
- 都是针对Java测试的工具。
2、两者不同点
- JUnit只能进行单元测试,TestNG可以进行单元测试,功能测试,端到端测试,集成测试等,主要是因为testNG存在depends可以进行测试用例的组合;
- TestNG需要一个额外的xml配置文件,配置测试的class、method甚至package。
- TestNG的运行方式更加灵活:命令行、ant和IDE,JUnit只能使用IDE。TestNG有自己的命令行执行方式。
- TestNG的annotation更加丰富和易懂,比如@ExpectedExceptions、@DataProvider等。
- 测试套件运行失败,JUnit 会重新运行整个测试套件。TestNG运行失败时,会创建一个XML文件说明失败的测试,利用这个文件执行程序,就不会重复运行已经成功的测试。
二、JUnit框架
大部分开发人员,一般使用的应该是Junit,主要使用两个版本:JUnit4与JUnit5。JUnit5的目标是采用Java8的编程风格并且比JUnit4更加健壮和灵活。
1、两者注解对比
特性 | JUnit4 | JUnit5 |
---|---|---|
声明一个测试方法 | @Test | @Test |
在当前类的所有测试方法执行前要执行的方法 | @BeforeClass | @BeforeAll |
在当前类的所有测试方法执行后要执行的方法 | @AfterClass | @AfterAll |
每个测试方法执行前要执行的方法 | @Before | @BeforeEach |
每个测试方法执行后要执行的方法 | @After | @AfterEach |
忽略某个测试方法或测试类 | @Ignore | @Disabled |
动态测试用例生成工厂 | 无此特性 | @TestFactory |
嵌套测试 | 无此特性 | @Nested |
标记与过滤 | @Category | @Tag |
注册定制扩展点 | 无此特性 | @ExtendWith |
2、两者对JDK的要求
JUnit4需要Java5或以上版本。
JUnit5需要Java8或以上版本。
3、两者架构不同
JUnit4把所有的代码都打包到一个jar包。
JUnit5由3个子模块构成:JUnit Platform、JUnit Jupiter和JUnit Vintage。
4、两者覆盖场景不同
JUnit5能支持静态方法、Final方法、私有方法的Mock等等。
三、Spring Boot对JUnit框架的集成
1、Spring Boot 集成JUnit
Spring Boot项目需要单元测试,只需要引入spring-boot-starter-test即可。
2、Spring Boot 集成JUnit的对应版本关系
Springboot >=2.2.X 支持版本为JUnit5;
Springboot <2.2.X 支持版本为JUnit4。
3、JUnit5对JUnit4的兼容方式
<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>
依赖排除说明:
(1) 这个是JUnit5中为了支持使用JUint4所做的一个过度,也就是说,你只需要在你的JUnit4旧项目中添加这个依赖, 就能完美过渡,而不用修改之前代码。
(2) 如果要在大于springboot 2.2.x版本使用junit4,上述的依赖排除删掉,还需手动引入junit4的jar包因为2.2.x只有junit5依赖。
4、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 |
参考资料
https://www.cnblogs.com/mzc1997/p/14306538.html
JUnit4和JUnit5的主要区别_junit4和junit5的区别_pilaf1990的博客-CSDN博客