单元测试系列:一、了解spring boot单元测试

一、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的兼容方式


    org.springframework.boot
    spring-boot-starter-test
    test
    
        
            org.junit.vintage
            junit-vintage-engine
        
    

依赖排除说明:

(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

单元测试系列:一、了解spring boot单元测试_第1张图片

参考资料

https://www.cnblogs.com/mzc1997/p/14306538.html

JUnit4和JUnit5的主要区别_junit4和junit5的区别_pilaf1990的博客-CSDN博客

你可能感兴趣的:(单元测试,spring,boot,junit)