El código duplicado es un olor en el código de prueba unitario tanto como en otro código. Si tiene código duplicado en las pruebas, será más difícil refactorizar el código de implementación porque tiene una cantidad desproporcionada de pruebas para actualizar. Las pruebas deberían ayudarlo a refactorizar con confianza, en lugar de ser una gran carga que obstaculice su trabajo en el código que se está probando.
Si la duplicación está en una configuración fija, considere hacer más uso del setUp
método o proporcionar más (o más flexibles) métodos de creación .
Si la duplicación está en el código que manipula el SSP, entonces pregúntese por qué varias pruebas de las llamadas "unidades" ejercen exactamente la misma funcionalidad.
Si la duplicación está en las afirmaciones, quizás necesite algunas afirmaciones personalizadas . Por ejemplo, si varias pruebas tienen una serie de afirmaciones como:
assertEqual('Joe', person.getFirstName())
assertEqual('Bloggs', person.getLastName())
assertEqual(23, person.getAge())
Entonces quizás necesite un solo assertPersonEqual
método para poder escribir assertPersonEqual(Person('Joe', 'Bloggs', 23), person)
. (O quizás simplemente necesita sobrecargar el operador de igualdad en Person
).
Como mencionas, es importante que el código de prueba sea legible. En particular, es importante que la intención de una prueba sea clara. Encuentro que si muchas pruebas se ven casi iguales (por ejemplo, tres cuartos de las líneas iguales o prácticamente iguales) es difícil detectar y reconocer las diferencias significativas sin leerlas y compararlas cuidadosamente. Entonces, encuentro que la refactorización para eliminar la duplicación ayuda a la legibilidad, porque cada línea de cada método de prueba es directamente relevante para el propósito de la prueba. Eso es mucho más útil para el lector que una combinación aleatoria de líneas que son directamente relevantes y líneas que son simplemente repetitivas.
Dicho esto, a veces las pruebas están ejercitando situaciones complejas que son similares pero aún significativamente diferentes, y es difícil encontrar una buena manera de reducir la duplicación. Use el sentido común: si cree que las pruebas son legibles y deja clara su intención, y se siente cómodo con tal vez la necesidad de actualizar más que un número teórico mínimo de pruebas al refactorizar el código invocado por las pruebas, entonces acepte la imperfección y muévase en algo más productivo. Siempre puede volver y refactorizar las pruebas más tarde, cuando llegue la inspiración.