En el trabajo, uno de mis proyectos consiste principalmente en tomar datos pasados de un cliente externo y conservarlos en una base de datos. Es una aplicación empresarial de Java que utiliza JPA y la mayor parte de nuestra lógica gira en torno a las operaciones CRUD.
La mayoría de nuestros errores involucran JPA de una forma u otra.
- Ejemplo 1: si hace clic dos veces en el botón Guardar, JPA podría intentar insertar la misma entidad en la base de datos por segunda vez, causando una violación de clave principal.
- Ejemplo 2: recupera una entidad de la base de datos, la edita e intenta actualizar sus datos. JPA puede intentar crear una nueva instancia en lugar de actualizar la anterior.
A menudo, la solución necesita agregar / eliminar / cambiar una anotación JPA. Otras veces tiene que ver con modificar la lógica DAO.
No puedo entender cómo obtener confianza en nuestro código utilizando pruebas unitarias y TDD. No estoy seguro de si es porque las pruebas unitarias y el TDD no encajan bien, o si me estoy acercando al problema mal.
Las pruebas unitarias parecen encajar mal porque solo puedo descubrir estos problemas en tiempo de ejecución y necesito implementarlos en un servidor de aplicaciones para reproducirlos. Por lo general, la base de datos debe estar involucrada, lo que considero que está fuera de la definición de una prueba unitaria: estas son pruebas de integración.
TDD parece un mal ajuste porque el bucle de retroalimentación de implementación + prueba es tan lento que me hace muy improductivo. El bucle de retroalimentación de implementación + prueba lleva más de 3 minutos, y eso es solo si ejecuto las pruebas específicamente sobre el código que estoy escribiendo. Ejecutar todas las pruebas de integración lleva más de 30 minutos.
Hay un código fuera de este molde y siempre hago pruebas unitarias siempre que puedo. Pero la mayoría de nuestros errores y los sumideros de tiempo más grandes siempre involucran JPA o la base de datos.
Hay otra pregunta que es similar , pero si siguiera el consejo estaría envolviendo la parte más inestable de mi código (el JPA) y probando todo menos eso. En el contexto de mi pregunta, estaría en la misma mala situación. ¿Cuál es el siguiente paso después de envolver el JPA? En mi opinión, esa pregunta es (quizás) un paso para responder a mi pregunta, pero no una respuesta.
unit testing != TDD
)