Description
Overview
Using: JUnit: 5.2.0
Great job on the new ParameterizedTest
support in v.5. The replacement of the static, one-per-class Parameters annotation with more flexible MethodSource
, etc. has been like a breath of fresh air and allowed me to remove thousands (!!) of lines of supporting code from my system. I'm really loving it.
However, someone decided to disallow zero parameters with this precondition check in ParameterizedTestExtension
.
.onClose(() ->
Preconditions.condition(invocationCount.get() > 0,
"Configuration error: You must provide at least one argument for this @ParameterizedTest"));
The problem with this is that we have some testing situations where parameterized tests with zero parameters are not exceptional. For example, we run tests against thousands of a certain type of class generically against a database of past production failures, and many of these classes have never experienced a production failure. When the tests are run, we now get failures due the above precondition check. JUnit 4 handled this cleanly: it would simply not run any tests on those classes.
Workaround
I can get around this by adding a null
to the method creating the collection of parameters if it is empty, and then return from the beginning of the @ParameterizedTest
method code if the passed parameter is null
. That lets us continue to run the parameterized tests against all of the classes, but comes with some disadvantages:
- We must add specific code to the front and back of every parameterized pair just to avoid a failure that doesn't matter to the tests.
- The handling of the
null
causes the test count inflation for these "phantom" tests. null
is now reserved as a signal for no parameters, rather than something wrong in the parameter creation.
Proposal
If nobody has any strong feelings about disallowing the no-parameter case, can we just have this precondition removed from a future version?
Thanks.