Necesito hacer un poco de defensa de los demonios en esta cuestión porque no puedo defenderla bien por falta de experiencia. Aquí está el trato, obtengo conceptualmente las diferencias entre las pruebas unitarias y las pruebas de integración. Al enfocarse específicamente en los métodos de persistencia y el repositorio, una prueba unitaria usaría un simulacro posiblemente a través de un marco como Moq para afirmar que una orden buscada se devolvió como se esperaba.
Digamos que he construido la siguiente prueba de unidad:
[TestMethod]
public void GetOrderByIDTest()
{
//Uses Moq for dependency for getting order to make sure
//ID I set up in 'Arrange' is same one returned to test in 'Assertion'
}
Entonces, si configuro OrderIdExpected = 5
y mi objeto simulado regresa 5
como ID, mi prueba pasará. Lo entiendo. Me unidad a prueba el código para asegurarse de que lo que mis preformas de código devuelve el objeto esperado y el ID y no otra cosa.
El argumento que obtendré es este:
"¿Por qué no simplemente omitir las pruebas unitarias y hacer pruebas de integración? Es importante probar el procedimiento almacenado de la base de datos y su código juntos. Parece demasiado trabajo adicional tener pruebas unitarias y pruebas de integración cuando finalmente quiero saber si la base de datos llama y el código funciona. Sé que las pruebas llevan más tiempo, pero tienen que ejecutarse y probarse de todos modos, por lo que me parece inútil tener ambas. Simplemente pruebe contra lo que importa ".
Podría defenderlo con una definición de libro de texto como: "Bueno, esa es una prueba de integración y tenemos que probar el código por separado como una prueba unitaria y, yada, yada, yada ..." Este es un caso donde una explicación purista de las prácticas vs. la realidad se está perdiendo. A veces me encuentro con esto y si no puedo defender el razonamiento detrás del código de prueba de la unidad que finalmente depende de dependencias externas, entonces no puedo defenderlo.
Cualquier ayuda sobre esta pregunta es muy apreciada, ¡gracias!