Следует ли разделять методы для повторного использования в JUnit?

У меня есть следующий тест 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 раза дольше, чем тестируемый метод :)

Пока я искал вопросы, похожие на этот, я ' Мы нашли что-то, называемое параметризованными тестами ... но похоже, что это что-то ориентированное на гораздо более крупные сценарии, не так ли?

6
задан AJPerez 9 October 2014 в 13:39
поделиться