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

标签 java junit junit5 parameterized-unit-test

我有一堆 @ParameterizedTest@MethodSource 接收参数,toString() 结果非常冗长(例如 Selenium 的 网络驱动程序)。这些默认用于组成相应的显示名称。来自JUnit 5 user guide :

By default, the display name of a parameterized test invocation contains the invocation index and the String representation of all arguments for that specific invocation. However, you can customize invocation display names via the name attribute of the @ParameterizedTest annotation […]

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

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

最佳答案

从 JUnit 5.8.0 开始,有一个 Named<T>作为 JUnit Jupiter API 的一部分的接口(interface),具有“自动支持将包含的有效负载 [参数] 直接注入(inject)参数化方法”(参见 issue #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 中寻找相应的别名和 Named :

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

更多信息请引用corresponding docs .

关于java - 在 JUnit 5 中为 @ParameterizedTest 生成显示名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57892989/

相关文章:

java - JavaFX 稍后运行不起作用

java - 从类路径上的 jar 文件导入 Spring 属性文件

java - 如何组织我的 Maven 项目

java - 如何使用映射结构中的列表将列表映射到对象

java - 如何在 Java 中表示 TCP 端口范围(16 位)

android-studio - 如何让 Android Studio Arctic Fox, "run all tests"工作?

java - 并行运行 junit 参数化测试(而不是类)

java - 从命令行进行 JUnit 测试

java - Spring Controller 的 catch block 中的单元测试代码

java - JUnit TestTemplates 的 IntelliJ 运行上下文