Actualmente estoy estableciendo las bases para una aplicación ASP.Net MVC y estoy investigando qué tipo de pruebas unitarias debería estar preparado para escribir. He visto en varios lugares a personas que esencialmente dicen 'no te molestes en probar tus puntos de vista, no hay lógica y es trivial y será cubierto por una prueba de integración'.
No entiendo cómo esto se ha convertido en la sabiduría aceptada. Las pruebas de integración tienen un propósito completamente diferente que las pruebas unitarias. Si rompo algo, no quiero saber media hora más tarde cuando se rompen mis pruebas de integración, quiero saber de inmediato.
Escenario de muestra: Digamos que estamos tratando con una aplicación CRUD estándar con una entidad del Cliente. El cliente tiene un nombre y una dirección. En cada nivel de prueba, quiero verificar que la lógica de recuperación del Cliente obtenga el nombre y la dirección correctamente.
Para realizar una prueba unitaria del repositorio, escribo una prueba de integración para acceder a la base de datos. Para realizar una prueba unitaria de las reglas comerciales, me burlo del repositorio, alimento los datos apropiados de las reglas comerciales y verifico que se devuelvan mis resultados esperados.
Lo que me gustaría hacer: para realizar una prueba unitaria de la interfaz de usuario, me burlo de las reglas de negocio, configuro mi instancia de cliente esperada, renderizo la vista y verifico que la vista contenga los valores apropiados para la instancia que especifiqué.
Lo que estoy atascado: para realizar una prueba unitaria del repositorio, escribo una prueba de integración, configuro un inicio de sesión apropiado, creo los datos requeridos en la base de datos, abro un navegador, navego hasta el cliente y verifico que la página resultante contenga valores para la instancia que especifiqué.
Me doy cuenta de que hay una superposición entre los dos escenarios discutidos anteriormente, pero la diferencia clave es el tiempo y el esfuerzo necesarios para configurar y ejecutar las pruebas.
Si yo (u otro desarrollador) elimina el campo de dirección de la vista, no quiero esperar a que la prueba de integración descubra esto. Quiero que se descubra y se marque en una prueba unitaria que se obtiene varias veces al día.
Tengo la sensación de que simplemente no estoy captando algún concepto clave. ¿Alguien puede explicar por qué desear comentarios de prueba inmediatos sobre la validez de una vista MVC es algo malo? (o si no está mal, entonces no es la forma esperada de obtener dichos comentarios)
"To unit-test the repository, I write an integration test"
¿Esperar lo? Esa no es una prueba unitaria del repositorio. Está automatizando la prueba, pero el código bajo prueba aún incluye el DAL y la base de datos. Para realizar una prueba unitaria del repositorio que tiene, lo aísla como lo hace para sus reglas comerciales.