参数化测试(@ParameterizedTest)

Exisi 2022-09-28 15:06:13
Categories: Tags:

 

参数

描述

name

用于参数化测试的单独调用的显示名称;不允许空白或仅由空格组成。

 

 

注解

说明

@ValueSource

提供对文字值数组的访问。

支持的类型包括

参数

描述

类型

shorts

用作参数来源的 short 值;不能为空

short[]

bytes

用作参数来源的字节值;不能为空

byte[]

ints

用作参数来源的 int 值;不能为空

int[]

longs

用作参数来源的 long 值;不能为空

long[]

floats

用作参数来源的浮点值;不能为空

float[]

doubles

用作参数来源的双精度值;不能为空

double[]

chars

用作参数来源的字符值;不能为空

char[]

booleans

用作参数来源的布尔值;不能为空

boolean[]

strings

用作参数来源的字符串值;不能为空

String[]

classes

用作参数来源的类值;不能为空

Classe<?>[]

 

但是请注意,每个@ValueSource 声明只能指定一种受支持的类型。

@MethodSource

提供对从声明此注释的类的工厂方法或从完全限定方法名称引用的外部类中的静态工厂方法返回的值的访问。

 

参数

描述

类型

value

测试类或外部类中用作参数来源的工厂方法的名称。

String[]

 

每个工厂方法都必须返回一个 StreamIterableIterator 或参数数组。

如果参数化测试只有一个参数,则每个工厂方法都可以返回值实例,例如直接作为单个 String 参数的 Stream<String> 。如果参数化测试方法声明了多个参数,则工厂方法必须返回 Arguments 的实例,例如作为 Stream<Arguments>

 

除非使用 PER_CLASS 测试实例生命周期模式,否则测试类中的工厂方法必须是静态的;而外部类中的工厂方法必须始终是静态的。在任何情况下,工厂方法都不能声明任何参数。

@EnumSource

@EnumSource 是指定 Enum 常量的 ArgumentsSource。枚举常量集可以通过 names() mode() 属性进行限制

参数

描述

类型

value

用作枚举常量源的枚举类型。

Class<? extends Enum<?>>

mode

枚举常量选择模式。

EnumSource.Mode

names

要提供的枚举常量的名称,或用于选择要提供的枚举常量名称的正则表达式。

String[]

 

@CsvSource

从它的 value() 属性中读取逗号分隔值 (CSV)

参数

描述

类型

value

用作参数来源的 CSV 行;不能为空。

String[]

delimiter

读取值时使用的列分隔符。

char

 

@CsvFileSource

用于从一个或多个类路径资源加载逗号分隔值 (CSV) 文件

参数

描述

类型

resources

用作参数来源的 CSV 类路径资源;不能为空。

String[]

delimiter

读取 CSV 文件时使用的列分隔符

char

encoding

读取 CSV 文件时使用的编码;必须是有效的字符集。

String

lineSeparator

读取 CSV 文件时使用的行分隔符;必须由 1 2 个字符组成。

String

numLinesToSkip

读取 CSV 文件时要跳过的行数

int

 

@ArgumentsSources

@ArgumentsSources 是一个用于一个或多个 ArgumentsSource 注释的简单容器。

但是请注意,@ArgumentsSources 容器的使用是完全可选的,因为@ArgumentsSource 是一个可重复的注释

参数

描述

类型

value

一个或多个 ArgumentsSource 注释的数组。

ArgumentsSource[]

 

@ArgumentsSource

@ArgumentsSource 是一个可重复的注释,用于为带注释的测试方法注册参数提供程序。

@ArgumentsSource 也可以用作元注释,以创建继承@ArgumentsSource 语义的自定义组合注释

参数

描述

类型

value

要使用的 ArgumentsProvider 的类型。

Class<? extends ArgumentsProvider>

 

示例

@ParameterizedTest

@ValueSource(strings = { "racecar""radar""able""saw" })

void valueTest(String word) {

    assertTrue(isWords(word));

}

示例

@ParameterizedTest

@EnumSource(TimeUnit.class)

void testWithEnumSource(TimeUnit timeUnit) {

    assertNotNull(timeUnit);

}

 

@ParameterizedTest

@EnumSource(value = TimeUnit.class, names = { "DAYS""HOURS" })

void testWithEnumSourceInclude(TimeUnit timeUnit) {

    assertTrue(EnumSet.of(TimeUnit.DAYS, TimeUnit.HOURS).contains(timeUnit));

}

示例

@ParameterizedTest

//如果您没有通过@MethodSource显式提供工厂方法名称,JUnit Jupiter将会搜索与当前的@ParameterizedTest方法同名的工厂方法

@MethodSource("stringProvider")

void testWithSimpleMethodSource(String argument) {

    assertNotNull(argument);

}

 

static Stream<String> stringProvider() {

    return Stream.of("foo""bar");

}

示例

@ParameterizedTest

@CsvSource({ "foo, 1""bar, 2""'baz, qux', 3" })

void testWithCsvSource(String first, int second) {

    assertNotNull(first);

    assertNotEquals(0, second);

}