Junit5的jar包,可用来测试Lambda表达式等,JUnit 基本来讲就是一个很大的 JAR 文件。测试内容编写者 — 像您我这样的开发人员 — 和工具供应商都使用它的 API,但后者使用很多内部 JUnit API。
Unit 5 概述
以前的 JUnit 版本都是整体式的。除了在 4.4 版中包含 Hamcrest JAR,JUnit 基本来讲就是一个很大的 JAR 文件。测试内容编写者 — 像您我这样的开发人员 — 和工具供应商都使用它的 API,但后者使用很多内部 JUnit API。
大量使用内部 API 给 JUnit 的维护者造成了一些麻烦,并且留给他们推动该技术发展的选择余地不多。来自 JUnit 5 用户指南:
“在 JUnit 4 中,只有外部扩展编写者和工具构建者才使用最初作为内部结构而添加的许多功能。这让更改 JUnit 4 变得特别困难,有时甚至根本不可能。”
JUnit Lambda(现在称为 JUnit 5)团队决定将 JUnit 重新设计为两个明确且不同的关注区域:
一个是编写测试内容的 API。
一个是发现和运行这些测试的 API。
这些关注区域现在已整合到 JUnit 5 的架构中,并且它们是明确分离的。图 1 演示了新架构(图像来自 Nicolai Parlog):
图 1. JUnit 5 的架构
JUnit 5 架构示意图。
如果仔细查看图 1,就会发现 JUnit 5 的架构有多么强大。好了,让我们仔细看看这个架构。右上角的方框表明,对 JUnit 5 而言,JUnit Jupiter API 只是另一个 API!因为 JUnit Jupiter 的组件遵循新的架构,所以它们可应用 JUnit 5,但您可以轻松定义不同的测试框架。只要一个框架实现了 TestEngine 接口,就可以将它插入任何支持 junit-platform-engine 和 junit-platform-launcher API 的工具中!
我仍然认为 JUnit Jupiter 非常特殊(毕竟我即将用一整篇教程来介绍它),但 JUnit 5 团队完成的工作确实具有开创性。我只是想指出这一点。我们继续看看图 1,直到我们完全达成一致。
使用 JUnit Jupiter 编写测试内容
就测试编写者而言,任何符合 JUnit 规范的测试框架(包括 JUnit Jupiter)都包含两个组件:
我们为其编写测试的 API。
理解这个特定 API 的 JUnit TestEngine 实现。
对于本教程,前者是 JUnit Jupiter API,后者是 JUnit Jupiter Test Engine。我将介绍这二者。
∨ 展开