在JUnit5中为@参数化为测试生成显示名称

我有一堆从@MethodSource接收参数的@ParameterizedTesttoString()结果非常详细(例如Selify的WebDriver)。默认情况下,这些名称用于组成相应的显示名称。来自JUnit 5 user guide:

默认情况下,参数化测试调用的显示名称包含调用索引和该特定调用的所有参数的字符串表示形式。但是,您可以通过@ParameterizedTest注释[…]的name属性来自定义调用显示名称

虽然这允许在一定程度上自定义显示名称,但我似乎无法调整各个参数的字符串表示形式。遗憾的是,通过@DisplayNameGeneration指定生成器只能应用于类级别,并且不会影响参数化测试调用的显示名称。

有没有办法对@ParameterizedTest使用DisplayNameGenerator或自定义给定参数的字符串表示形式?


解决方案

从JUnit5.8.0开始,有一个Named<T>接口作为JUnitJupiter API的一部分,它自动支持将包含的有效负载[参数]直接注入到参数化方法中(请参阅issue #2301)。示例:

@DisplayName("A parameterized test with named arguments")
@ParameterizedTest(name = "{index}: {0}")
@MethodSource("namedArguments")
void testWithNamedArguments(File file) {}

static Stream<Arguments> namedArguments() {
    return Stream.of(
        Arguments.of(Named.of("An important file", new File("path1"))),
        Arguments.of(Named.of("Another file", new File("path2")))
    );
}

如果您更喜欢静态导入,也可以从ArgumentsNamed中获取相应的别名:

arguments(named("An important file", new File("path1")))

有关详细信息,请参阅corresponding docs。

相关文章