🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓
- GitHub - apihug/apihug.com: All abou the Apihug
- apihug.com: 有爱,有温度,有质量,有信任
- 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
- JUnit Platform: 用于JVM上启动测试框架的基础服务,提供命令行,IDE和构建工具等方式执行测试的支持。
- JUnit Jupiter:包含 JUnit 5 新的编程模型和扩展模型,主要就是用于编写测试代码和扩展代码。
- JUnit Vintage:用于在JUnit 5 中兼容运行 JUnit3.x 和 JUnit4.x 的测试用例。
JUnit 5,首先需要 Java 8 以上的运行环境,虽然在旧版本 JDK 也能编译运行,但要完全使用 JUnit 5 功能, JDK 8 环境是必不可少的,JUnit 5 这个版本,主要特性:
- 提供全新的断言和测试注解,支持测试类内嵌
- 更丰富的测试方式:支持动态测试,重复测试,参数化测试等
- 实现了模块化,让测试执行和测试发现等不同模块解耦,减少依赖
- 提供对 Java 8 的支持,如 Lambda 表达式,Sream API等。
JUnit 5 Big Picture:
JUint5似乎已经不再满足于安安静静做一个单元测试框架了,它的野心很大,想通过接入不同测试引擎,来支持各类测试框架的使用,成为一个单元测试的平台。
因此它也采用了分层的架构,分成了平台层,引擎层,框架层。
Junit5 整体包图 :
根据模块化的思路, JUnit 5 平台拆分如下:
- junit-platform-commons, 内部公用包
- junit-platform-console, 控制台运行
- junit-platform-console-standalone 控制台直接一个全的jar包运行
- junit-platform-engine, 测试引擎 API
- junit-platform-launcher, IDE 运行测试工具
- junit-platform-runner, JUnit4 上执行测试套件
- junit-platform-suite-api, annotations 配置测试套件
- junit-platform-surefire-provider, Maven 插件
- junit-platform-gradle-plugin, Gradle 插件
JUnit Jupiter 包含核心依赖包:
- junit-jupiter-api, 用来写 tests & extensions
- junit-jupiter-engine, JUnit Jupiter 测试引擎实现, 只在运行时候使用
- junit-jupiter-params, 提供参数测试, 有点类似 TestNG
- 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 世界的其他测试框架:
- TestNG
- AssertJ: 可以builder 模式构建调用链
- Hamcrest
- Mockito
- JSONAssert
- JsonPath