在Eclipse中,在junit测试类中使用Parameterized runner时,每次运行都以数字(0,1等)标记
有没有办法用合适的标签替换这个号码?
PS:我使用的是早于4.11的JUNIT
版本 4.8 ,因此@Parameters
不会带任何参数
测试用例:
@RunWith(value = Parameterized.class)
public class TestClass {
@Parameters
public static Collection<Object[]> getLabels() {
List<Object[]> labels = new ArrayList<Object[]>();
labels.add(new Object[] {"Toto"});
labels.add(new Object[] {"Titi"});
return labels;
}
private final String label;
public TestClass(String label) {
this.label = label;
}
@Test
public void test1() {
assertTrue(true);
}
}
结果:
答案 0 :(得分:2)
在参数化测试中可以轻松识别各个测试用例,您可以使用@Parameters注释提供名称。 此名称允许包含在运行时替换的占位符:
{index}:当前参数索引
{0},{1},...:第一个,第二个,依此类推,参数值
见这里的例子: https://github.com/junit-team/junit/wiki/Parameterized-tests
答案 1 :(得分:0)
参数化测试在内部调用 toString()
,这对我们不起作用,因为我们的某些实现不允许 toString()
并抛出异常。
在这种情况下,测试名称将是
TestClass
testMethod
[1] Argument1.toString()
[2] Argument2.toString()
[3]
我为包含原始对象的参数创建了一个对象包装器,并覆盖了 toString
方法。
这是示例。
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();
}
}
它会产生
TestClass
testAllLabels
[1] SimpleLabel
[2] LabelExtended2D
[3] Label