У меня есть следующий тест 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 раза дольше, чем тестируемый метод:)
Пока я искал вопросы, подобные этому, я обнаружил нечто, называемое параметризованными тестами ... но, похоже, что-то ориентировано на гораздо большие сценарии, не так ли?