Tengo la siguiente prueba JUnit. El método que estoy probando es bastante simple, simplemente recibe un número y devuelve una lista con sus divisores. No quiero repetir el código de prueba muchas veces, así que he creado un método auxiliar, testDivisorsAux
:¿Debo dividir los métodos para su reutilización en 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));
}
}
Todo funciona bien, me pregunto ... es esta una mala práctica? ¿Debo escribir la prueba de otra manera? Tal vez mantener todo el código dentro del "método @Test
"?
PMD me está diciendo que las pruebas JUnit deben incluir assert() o no() (para el primer método), y JUnit 4 pruebas que se ejecutan las pruebas deben utilizar la anotación @test (para el segundo) . Sé que PMD está usando solo una expresión regular (bueno, en realidad es XPath) para determinar qué reglas estoy rompiendo ... así que me inclino a pensar que es simplemente una advertencia de "falso positivo". Pero de todos modos, me gustaría saber si estoy haciendo algo mal. (Aparte de escribir pruebas 4 veces más que el método está probado :)
Mientras yo estaba buscando preguntas similares a éste, he encontrado algo que se llama pruebas parametrizados ... pero parece que es algo orientado a escenarios mucho más grandes, ¿no?
Muchas gracias por su respuesta, @Adam. No estaba realmente preocupado por las advertencias de PMD, pero de todos modos un buen truco para evitarlos. :) No solo es un buen truco, creo que los nombres que propones son también más descriptivos que los míos ... – AJPerez