Parameterized test is calling toString()
internally, which does not work for us because some our implementations do not allow toString()
and throw an exception.
In this case, the test names will be
TestClass
testMethod
[1] Argument1.toString()
[2] Argument2.toString()
[3]
I created an object wrapper for my argument that holds the original object, and overrides toString
method.
Here is the example.
private static List<LabelArgument> getLabels() {
List<LabelArgument> labels = new ArrayList<>();
labels.add(LabelArgument.of(new SimpleLabel("Hi there")));
labels.add(LabelArgument.of(new LabelExtended2D("Good bye!")));
// Label toString throws an exception
labels.add(LabelArgument.of(new Label("Simple")));
return labels;
}
@ParameterizedTest
@MethodSource("getLabels")
void testLabel(LabelArgument labelArgument ) {
var label = labelArgument.getLabel();
// Do the test
}
private static class LabelArgument {
private Label label;
private LabelArgument(Label label) {
this.label = label;
}
public static LabelArgument of(Label label) {
return new LabelArgument(label);
}
@Override
public String toString() {
return label.getClass().getSimpleName();
}
}
It will produce
TestClass
testAllLabels
[1] SimpleLabel
[2] LabelExtended2D
[3] Label