У меня есть следующий тест JUnit. Метод, который я тестирую, довольно прост: он просто получает число и возвращает список с его делителями. Я не хочу повторять тестовый код много раз, поэтому я создал дополнительный метод, testDivisorsAux
:
@Test
public final void testDivisors() {
testDivisorsAux(1, new int[] { 1 });
testDivisorsAux(6, new int[] { 1, 2, 3, 6 });
testDivisorsAux(0, new int[] { });
...
}
private final void testDivisorsAux(final int number, final int[] expected) {
List<Integer> divisors = Util.divisors(number);
assertSame(divisors.size(), expected.length);
for (int i : expected) {
assertTrue(divisors.contains(i));
}
}
Все работает нормально, мне просто интересно ... это плохая практика? Следует ли мне написать тест по-другому? Может быть, сохранить весь код в «методе @Test
»?
PMD сообщает мне, что тесты JUnit должны включать assert () или fail () (для первого метода) , и тесты JUnit 4, выполняющие тесты, должны использовать аннотацию @Test (для второй). Я знаю, что PMD использует только регулярное выражение (ну, на самом деле это XPath), чтобы определить, какие правила я нарушаю ... поэтому я склонен думать, что это просто «ложное срабатывание» . Но в любом случае, я хотел бы знать, если я что-то не так делаю. (Не считая написания тестов в 4 раза дольше, чем тестируемый метод :)
Пока я искал вопросы, похожие на этот, я ' Мы нашли что-то, называемое параметризованными тестами ... но похоже, что это что-то ориентированное на гораздо более крупные сценарии, не так ли?