

重要性:★★★★☆
有时候,为了能够全面证明代码的正确性,我们需要使用多组不同的数据去测试同一个方法(例如用不同的取款金额去测试取款的结果)。如果针对每组数据分别写一个测试方法,就会非常繁琐。
通过使用@ParameterizedTest注解取代@Test注解,我们可以使用不同的参数值多次调用同一个测试方法,这就是参数化测试。当执行参数化测试的时候,还需要至少定义一个参数源,用来为测试方法提供参数值。
下面是简单的参数化测试例子:
@ParameterizedTest
@ValueSource(strings = {
"racecar", "radar", "able was I ere I saw elba" })
void palindromes(String candidate) {
assertTrue(StringUtils.isPalindrome(candidate));
}
1. 添加依赖项
要编写参数化测试,必须在项目中添加junit-jupiter-params依赖项。
在maven项目中,需要在pom.xml文件中的<dependencies>节添加下面的依赖:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
在gradle项目中,需要在build.gradle文件中的dependencies节添加以下内容:
testCompile 'org.junit.jupiter:junit-jupiter-params:5.6.2'
如果项目中已经定义了junit-jupiter依赖项,就不需要添加junit-jupiter-params依赖项了。因为前者对后者有传递性依赖。
2. 定义参数源
JUnit Jupiter提供了一些内建的参数源注解。
2.1 @ValueSource
通过指定一个由简单值字面量组成的数组提供参数源。当使用@ValueSource时,测试方法只能有一个来自参数源的参数(依赖注入的其他参数不算)。
@ValueSource支持以下的数据类型:
- short
- byte
- int
- long
- float
- double
- char
- boolean
- java.lang.String
- java.lang.Class
例如,下面的代码示例会分别以1,2,3作为参数值调用参数化测试方法testWithValueSource()各一次。
package yang.yu.tdd.parameterized;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.assertj.core.api.Assertions.assertThat;
public class ParameterizedDemo {
@ParameterizedTest
@ValueSource(ints = {
1, 2, 3 })
void testWithValueSource(int argument) {
assertThat(argument).isGreaterThan(0).isLessThan(4);
}
}
2.2 @NullSource、@EmptySource和@NullAndEmptySource
为了测试被测类方法在接收各种“坏”输入值时方法的行为,我们要给参数化测试方法提供能够提供代表null和空值的参数值。
@NullSource:给参数化测试方法提供null作为参数值。这个注解不能用于提供基本类型的值。@EmptySource:为参数化测试方法提供代表空(empty)的值作为参数值。支持以下类型:java.lang.String,java.util.List,java.util.Set,java.util.Map, 基本类型数组 (例如int[],char[][], 等等), 对象数组 (例如String[],Integer[][]等等,但不支持上述类型的子类型。对于字符串,会提供空字符串;对于各种集合、Map和数组,提供不包含任何元素的空集合、空Map和空数组。@NullAndEmptySo

本文详细介绍了如何在Java中使用JUnit进行参数化测试,包括添加依赖、定义参数源(如@ValueSource、@NullSource、@EmptySource等)、参数转换以及与其他参数共存等,帮助开发者更有效地验证代码的正确性。
最低0.47元/天 解锁文章
594

被折叠的 条评论
为什么被折叠?



