- 参数化测试使使用不同参数多次运行测试成为可能。它们与常规的@Test方法一样被声明,但是使用 @ParameterizedTest注释。
参数 |
描述 |
name |
用于参数化测试的单独调用的显示名称;不允许空白或仅由空格组成。 |
- 此外,您必须声明至少一个源,该源将为每个调用提供参数,然后使用测试方法中的参数,源提供的值将作为带注释的 @ParameterizedTest 方法的参数提供。
注解 |
说明 |
|||||||||||||||||||||||||||||||||
@ValueSource |
提供对文字值数组的访问。 支持的类型包括
但是请注意,每个@ValueSource 声明只能指定一种受支持的类型。 |
|||||||||||||||||||||||||||||||||
@MethodSource |
提供对从声明此注释的类的工厂方法或从完全限定方法名称引用的外部类中的静态工厂方法返回的值的访问。
每个工厂方法都必须返回一个 Stream、Iterable、Iterator 或参数数组。 如果参数化测试只有一个参数,则每个工厂方法都可以返回值实例,例如直接作为单个 String 参数的 Stream<String> 。如果参数化测试方法声明了多个参数,则工厂方法必须返回 Arguments 的实例,例如作为 Stream<Arguments>。
除非使用 PER_CLASS 测试实例生命周期模式,否则测试类中的工厂方法必须是静态的;而外部类中的工厂方法必须始终是静态的。在任何情况下,工厂方法都不能声明任何参数。 |
|||||||||||||||||||||||||||||||||
@EnumSource |
@EnumSource 是指定 Enum 常量的 ArgumentsSource。枚举常量集可以通过 names() 和 mode() 属性进行限制
|
|||||||||||||||||||||||||||||||||
@CsvSource |
从它的 value() 属性中读取逗号分隔值 (CSV)
|
|||||||||||||||||||||||||||||||||
@CsvFileSource |
用于从一个或多个类路径资源加载逗号分隔值 (CSV) 文件
|
|||||||||||||||||||||||||||||||||
@ArgumentsSources |
@ArgumentsSources 是一个用于一个或多个 ArgumentsSource 注释的简单容器。 但是请注意,@ArgumentsSources 容器的使用是完全可选的,因为@ArgumentsSource 是一个可重复的注释
|
|||||||||||||||||||||||||||||||||
@ArgumentsSource |
@ArgumentsSource 是一个可重复的注释,用于为带注释的测试方法注册参数提供程序。 @ArgumentsSource 也可以用作元注释,以创建继承@ArgumentsSource 语义的自定义组合注释
|
示例
@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); } |