Me he encontrado con este dilema varias veces. ¿Deberían mis pruebas unitarias duplicar la funcionalidad del método que están probando para verificar su integridad? O ¿Deberían las pruebas unitarias tratar de probar el método con numerosas instancias de creadas manualmente de entradas y salidas esperadas?¿Debe una prueba de unidad replicar la funcionalidad o la salida de prueba?
Principalmente hago la pregunta para situaciones en las que el método que está probando es razonablemente simple y su funcionamiento correcto puede verificarse echando un vistazo al código por un minuto.
ejemplosimplificado (en rubí):
def concat_strings(str1, str2)
return str1 + " AND " + str2
end
simplificado funcionalidad de replicación de prueba para el método anterior:
def test_concat_strings
10.times do
str1 = random_string_generator
str2 = random_string_generator
assert_equal (str1 + " AND " + str2), concat_strings(str1, str2)
end
end
entiendo que la mayoría de las veces el método que se está probando no será sencillo lo suficiente como para justificar hacerlo de esta manera. Pero mi pregunta permanece; ¿es esta una metodología válida en algunas circunstancias (por qué o por qué no)?
No estoy muy familiarizado con el primer escenario, donde una prueba unitaria duplica la funcionalidad de un método, ¿puede darme un poco más de detalles? – RobS
En Desarrollo controlado por prueba A menudo estoy creando una prueba para verificar que un método (aún por escribir) funcione como se espera. A menudo me siento tentado, en escenarios simples, de escribir estas especificaciones de la forma que mejor sé, de forma programática para lograr el resultado deseado a partir de los valores de entrada. A veces siento que sería más probable que cometa un error al calcular a mano y al ingresar los resultados esperados que simplemente escribir un poco de código para hacer el trabajo. –
gran pregunta: supongo que esta es una excepción a la regla de OnceAndOnlyOnce .. a menos que no sepa cómo refactorizar esto correctamente. – Gishu