У меня есть следующий тест JUnit. Метод, который я тестирую, довольно прост, он просто получает число и возвращает список с его делителями. Я не хочу повторять тест код много раз, поэтому я создал метод ДОПОЛНИТЕЛЬНОГО, testDivisorsAux
:Должен ли я разделить методы повторного использования в JUnit?
@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() или не() (первый метод), и JUnit 4 тестов, которые выполняют тесты должны использовать @test аннотацию (для второго) , Я знаю, что PMD использует только регулярное выражение (ну, на самом деле это XPath), чтобы определить, какие правила я нарушает ... поэтому я склонен думать, что это просто «ложноположительное» предупреждение. Но в любом случае, я хотел бы знать, что я делаю что-то неправильно. (Appart от написания тестов в 4 раза дольше, чем тестируемый метод :)
Пока я искал вопросы, подобные этому, я нашел что-то под названием параметризованных тестов ... но, похоже, это что-то ориентированное гораздо больше сценариев, не так ли?
Большое спасибо за ваш ответ @Adam. Меня не беспокоили предупреждения PMD, но в любом случае хороший трюк, чтобы их избежать! :) Не только хороший трюк, я думаю, что имена, которые вы предлагаете, также более наглядны, чем мои ... – AJPerez