Как указать метку для запуска Parameterized junit

В Eclipse при использовании Runner с параметрами в тестовом классе junit каждый прогон отмечается числом (0, 1 и т. Д.)

Есть ли способ заменить этот номер соответствующей этикеткой?

PS: я использую JUNIT версия 4.8 старше, чем 4.11, поэтому @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);
    }
}

Результат:

2 ответа

Решение

Существует простой способ легко идентифицировать отдельные тестовые случаи в параметризованном тесте, вы можете указать имя с помощью аннотации @Parameters.
Это имя может содержать заполнители, которые заменяются во время выполнения:

{index}: текущий индекс параметра
{0}, {1}, …: первое, второе и т. Д., Значение параметра

Смотрите пример здесь: https://github.com/junit-team/junit/wiki/Parameterized-tests

Параметризованный тест вызывается внутри, что не работает для нас, потому что некоторые наши реализации не позволяют 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
Другие вопросы по тегам