34 lines
2.4 KiB
Plaintext
34 lines
2.4 KiB
Plaintext
Captured from a real `mvn test -Dtest=HeaderNamePlaceholderMistakeTest` run with the
|
|
@Disabled annotation temporarily removed -- i.e. exactly
|
|
name = "user {USER_ID} with role {ROLE}" on a real @CsvSource(useHeadersInDisplayName = true)
|
|
test, run for real.
|
|
|
|
-------------------------------------------------------------------------------
|
|
Test set: com.ankurm.tutorials.junit.parameterized.HeaderNamePlaceholderMistakeTest
|
|
-------------------------------------------------------------------------------
|
|
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.050 s <<< FAILURE! -- in com.ankurm.tutorials.junit.parameterized.HeaderNamePlaceholderMistakeTest
|
|
com.ankurm.tutorials.junit.parameterized.HeaderNamePlaceholderMistakeTest.nameTemplateCannotReferenceHeadersByName(int, String, boolean) -- Time elapsed: 0.034 s <<< ERROR!
|
|
org.junit.platform.commons.JUnitException: The display name pattern defined for the parameterized test is invalid. See nested exception for further details.
|
|
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
|
|
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
|
|
Caused by: java.lang.IllegalArgumentException: can't parse argument number: USER_ID
|
|
at java.base/java.text.MessageFormat.setFormatFromPattern(MessageFormat.java:1644)
|
|
at java.base/java.text.MessageFormat.applyPatternImpl(MessageFormat.java:660)
|
|
at java.base/java.text.MessageFormat.<init>(MessageFormat.java:516)
|
|
... 2 more
|
|
Caused by: java.lang.NumberFormatException: For input string: "USER_ID"
|
|
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
|
|
at java.base/java.lang.Integer.parseInt(Integer.java:565)
|
|
at java.base/java.lang.Integer.parseInt(Integer.java:662)
|
|
at java.base/java.text.MessageFormat.setFormatFromPattern(MessageFormat.java:1642)
|
|
... 4 more
|
|
|
|
The stack trace gives away the mechanism: @ParameterizedTest's `name` attribute is not its own
|
|
template language -- it compiles down to a real java.text.MessageFormat pattern, and
|
|
MessageFormat only understands numeric argument indices ({0}, {1}, ...). "USER_ID" is not a
|
|
number, so MessageFormat's own pattern parser throws NumberFormatException trying to read it
|
|
as one, before the test ever runs a single invocation. useHeadersInDisplayName = true changes
|
|
what JUnit generates automatically when no custom name is given (see
|
|
docs/output/05-csv-source-headers-default-display-name.txt) -- it does not add a new kind of
|
|
placeholder you can reference yourself.
|