Как указать метку для запуска 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