在 JUnit 5 中为 @ParameterizedTest 生成显示名称

2024-03-06

我有一堆@ParameterizedTests 从 a 接收参数@MethodSource相当冗长toString()结果(例如 Selenium 的WebDriver)。默认情况下使用它们来组成相应的显示名称。来自JUnit 5 用户指南 https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests-display-names:

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

虽然这允许在一定程度上自定义显示名称,但我似乎无法调整各个参数的字符串表示形式。不幸的是,通过指定生成器@DisplayNameGeneration https://junit.org/junit5/docs/current/user-guide/#writing-tests-display-name-generator只能在类级别应用,不会影响参数化测试调用的显示名称。

有没有办法使用DisplayNameGenerator https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/DisplayNameGenerator.Standard.html for @ParameterizedTest或者自定义给定参数的字符串表示形式?


从 JUnit 5.8.0 开始,有一个Named<T>接口作为 JUnit Jupiter API 的一部分,具有“自动支持将包含的有效负载 [参数] 直接注入参数化方法”(请参阅问题#2301 https://github.com/junit-team/junit5/issues/2301)。例子:

@DisplayName("A parameterized test with named arguments")
@ParameterizedTest
@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")))
    );
}

如果您喜欢静态导入,您也可以从以下位置获取相应的别名Arguments and Named:

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

欲了解更多信息,请参阅相应的文档 https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests-display-names.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JUnit 5 中为 @ParameterizedTest 生成显示名称 的相关文章

随机推荐