【问题标题】:Generating display names for @ParameterizedTest in JUnit 5在 JUnit 5 中为 @ParameterizedTest 生成显示名称
【发布时间】:2020-01-13 12:30:52
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java junit junit5 parameterized-unit-test


    【解决方案1】:

    为了在 JUnit 直接支持之前间接实现您的目标,您始终可以在测试中添加一个所需字符串的参数。然后需要在参数提供者方法中进行自定义。

    @ParameterizedTest(name = "{index} {1}")
    @MethodSource("argumentProvider")
    public void testSomething(Object someObject, String niceRepresentation) {
        // Test something
    }
    
    private static Stream<Arguments> argumentProvider() {
        return Stream.of(
                Arguments.of(new Object(), "Nice 1"),
                Arguments.of(new Object(), "Nice 2")
        );
    }
    

    缺点是单元测试提供了测试实现中未使用的参数,这可能会损害清晰度,但随后它会与测试报告中的冗长名称进行权衡。

    【讨论】:

    • 我已经想过类似的事情了。也可以扩展参数类型并覆盖toString(),但我希望有一个更好的解决方案。尽管如此,有效的解决方案 - 谢谢!
    • 这不是类型安全的,因为实际参数可能会改变而导致字符串不匹配,但目前似乎是唯一的方法。
    【解决方案2】:

    从 JUnit 5.8.0 开始,有一个 Named&lt;T&gt; 接口作为 JUnit Jupiter 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 2015-12-03
      相关资源
      最近更新 更多