如何为参数化的junit运行指定标签

时间:2014-01-23 12:04:19

标签: java eclipse junit4 parameterized

在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);
    }
}

结果:

enter image description here

2 个答案:

答案 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