Junit 历史-ApiHug准备-测试篇-008

    🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓

  1. GitHub - apihug/apihug.com: All abou the Apihug   
  2. apihug.com: 有爱,有温度,有质量,有信任
  3. ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace

背景

JUnit作为目前Java领域内最为流行的单元测试框架已经走过了数十年。而JUnit5在JUnit4停止更新版本的3年后终于也于2017年发布了。

作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不同。首先Junit5由来自三个不同子项目的几个不同模块组成:

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

  1. JUnit Platform: 用于JVM上启动测试框架的基础服务,提供命令行,IDE和构建工具等方式执行测试的支持。
  2. JUnit Jupiter:包含 JUnit 5 新的编程模型和扩展模型,主要就是用于编写测试代码和扩展代码。
  3. JUnit Vintage:用于在JUnit 5 中兼容运行 JUnit3.x 和 JUnit4.x 的测试用例。

JUnit 5,首先需要 Java 8 以上的运行环境,虽然在旧版本 JDK 也能编译运行,但要完全使用 JUnit 5 功能, JDK 8 环境是必不可少的,JUnit 5 这个版本,主要特性:

  1. 提供全新的断言和测试注解,支持测试类内嵌
  2. 更丰富的测试方式:支持动态测试,重复测试,参数化测试等
  3. 实现了模块化,让测试执行和测试发现等不同模块解耦,减少依赖
  4. 提供对 Java 8 的支持,如 Lambda 表达式,Sream API等。

JUnit 5 Big Picture:

JUint5似乎已经不再满足于安安静静做一个单元测试框架了,它的野心很大,想通过接入不同测试引擎,来支持各类测试框架的使用,成为一个单元测试的平台。

因此它也采用了分层的架构,分成了平台层,引擎层,框架层。

Junit5 整体包图 :

根据模块化的思路, JUnit 5 平台拆分如下:

  1. junit-platform-commons, 内部公用包
  2. junit-platform-console, 控制台运行
  3. junit-platform-console-standalone 控制台直接一个全的jar包运行
  4. junit-platform-engine, 测试引擎 API
  5. junit-platform-launcher, IDE 运行测试工具
  6. junit-platform-runner, JUnit4 上执行测试套件
  7. junit-platform-suite-api, annotations 配置测试套件
  8. junit-platform-surefire-provider, Maven 插件
  9. junit-platform-gradle-plugin, Gradle 插件

JUnit Jupiter 包含核心依赖包:

  1. junit-jupiter-api, 用来写 tests & extensions
  2. junit-jupiter-engine, JUnit Jupiter 测试引擎实现, 只在运行时候使用
  3. junit-jupiter-params, 提供参数测试, 有点类似 TestNG
  4. junit-jupiter-migrationsupport, 将测试 JUnit 4 迁移到 JUnit Jupiter, 只有用 JUnit 4 规则.

这个图可以更具体看出 Junit5 在逻辑层, 和各个包的分布关系图:

#Junit BOM

Junit 基本的信息都了解了, 下面就进入Junit 的实践过程, Junit5 拆分成多个包, 所以统一使用BOM 方式管理, 现在只需要引入以下一个包即可


testImplementation(platform("org.junit:junit-bom:5.8.2"))
testRuntimeOnly("org.junit.platform:junit-platform-launcher") {
  because("Only needed to run tests in a version of IntelliJ IDEA that bundles older versions")
}
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
testRuntimeOnly("org.junit.vintage:junit-vintage-engine")

JUnit5是运行在JUnit Platform上的,所以还需要在build.gradle中加上这个:

test {
    useJUnitPlatform()
}

参考文件: CalculatorTestsopen in new window


public class Calculator {

  public int add(int a, int b) {
    return a + b;
  }
}


class CalculatorTests {

  @Test
  @DisplayName("1 + 1 = 2")
  void addsTwoNumbers() {
    Calculator calculator = new Calculator();
    assertEquals(2, calculator.add(1, 1), "1 + 1 should equal 2");
  }
}

测试结果:


CalculatorTests > 1 + 1 = 2 PASSED

#参考

Java 世界的其他测试框架:

  1. TestNG
  2. AssertJ: 可以builder 模式构建调用链
  3. Hamcrest
  4. Mockito
  5. JSONAssert
  6. JsonPath

我们

api-hug-contact

  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值