Skip to content

CSV header names do not work with {argumentsWithNames} display name patterns #4783

@sbrannen

Description

@sbrannen

Overview

While working on #4716, by merely inspecting the code I theorized that there must be something wrong with how useHeadersInDisplayName works. So, I wrote an example and confirmed it.

Specifically, when I introduced the useHeadersInDisplayName support for @CsvSource and @CsvFileSource in JUnit Jupiter 5.8.2, I used a hack to create the "header name = argument value" entries in the display names using Named.

Unfortunately, that hack only works with the {arguments} display name pattern.

Thus, the examples in the User Guide explicitly declare that as follows.

@ParameterizedTest(name = "[{index}] {arguments}")
@CsvSource(useHeadersInDisplayName = true, textBlock = """
    FRUIT,         RANK
    apple,         1
    banana,        2
    'lemon, lime', 0xF1
    strawberry,    700_000
    """)
void testWithCsvSource(String fruit, int rank) {
    // ...
}

That results in display names like [1] FRUIT = apple, RANK = 1, which is the desired result.

However, if you simply declare @ParameterizedTest, without specifying an alternative name pattern, that results in display names like [1] fruit=FRUIT = apple, rank=RANK = 1, which is obviously not the desired result. This is due to the fact that <parameter name>= is prepended to the argument value (or name-value pair as is the case for useHeadersInDisplayName).

Aside from the fact that we obviously have different formatting for the two features (x=y vs. x = y), we should ensure that the useHeadersInDisplayName feature works properly when using the default display name pattern (or one equivalent to {argumentsWithNames}.

Related Issues

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions