参数化测试是定义和运行多个测试用例的好方法,它们之间的唯一区别是数据。在这里,我们看一下JUnit测试常用的三个不同框架。
在编写单元测试时,通常会在测试方法本身中初始化方法输入参数和预期结果。在某些情况下,使用少量输入就足够了;但是,在某些情况下,我们需要使用大量的值来验证代码中的所有功能。参数化测试是定义和运行多个测试用例的好方法,它们之间的唯一区别是数据。他们可以验证各种值的代码行为,包括边界情况。参数化测试可以增加代码覆盖率,并确保代码按预期运行。
有许多用于Java的良好参数化框架。在本文中,我们将研究JUnit测试常用的三个不同框架,并将它们与每个测试的结构示例进行比较。最后,我们将探索如何简化和加速参数化测试的创建。
JUnit参数化测试框架
让我们比较一下三种最常见的框架:JUnit 4,JunitParams和JUnit5。每个JUnit参数化框架都有自己的优点和缺点。
JUnit 4
优点:
- 这是JUnit 4内置的参数化框架,因此不需要其他外部依赖项。
- 它支持Java的较早版本(JDK 7和更早版本)。
缺点:
- 测试类使用字段和构造函数来定义参数,这会使测试更加冗长。
- 对于每个要测试的方法,它都需要一个单独的测试类。
JunitParams
优点:
- 通过允许将参数直接传递给测试方法来简化参数语法。
- 每个测试类允许多个测试方法(每个方法都有自己的数据)。
- 支持CSV数据源以及基于注释的值(无需方法)。
缺点:
- 要求使用JunitParams依赖项配置项目。
- 在运行和调试测试时,必须运行该类中的所有测试-无法在测试类中运行单个测试方法。
JUnit 5
优点:
- 该参数化框架内置于JUnit 5中,并改进了JUnit 4中包含的内容。
- 具有简化的参数语法,例如JunitParams。
- 支持多种数据集源类型,包括CSV和注释(无需方法)。
- 即使不需要额外的依赖项,也需要多个.jar。
缺点:
- 需要Java 8和更高版本的构建系统(4.6版或Maven Surefire 2.21版)。
- 您的IDE可能还不支持(在撰写本文时,仅Eclipse和IntelliJ支持JUnit 5)。