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

Generating display names for @ParameterizedTest in JUnit 5(在JUnit5中为@参数化为测试生成显示名称)

本文介绍了在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。

这篇关于在JUnit5中为@参数化为测试生成显示名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:在JUnit5中为@参数化为测试生成显示名称

基础教程推荐