Mis clases siguen esta estructura.
- Nivel de servicio (crea y asigna InputDTO a datos de base de datos)
- Nivel DAO (en realidad ejecuta llamadas DB)
Cuando escribo pruebas JUnit de nivel de servicio, se llama al nivel DAO, y esto espera una conexión de base de datos real y obtener datos de la base de datos.
¿Debería burlarme completamente del nivel DAO del nivel de servicio, o debería burlarme de la conexión de la base de datos y los datos recibidos de la base de datos?
En segundo lugar, la aplicación espera ciertos datos de un caché.
Para el tiempo de ejecución de JUnit, no hay caché, entonces, ¿cómo se debe manejar esto? El método de nivel de servicio incluye buscar el caché para obtener los detalles.
fuente
En resumen, la respuesta es bastante simple.
Tienes tres capas
[El caso de prueba] -> [El comportamiento bajo prueba] -> [Los colaboradores utilizados por ese comportamiento]
La tercera capa es lo que debe ser burlado. Por ejemplo:
PokemonCaptureServiceTest
;PokemonCaptureService
;Pokeball
En este ejemplo, resulta que
Pokeball
es una lógica de terceros. Requiere todo tipo de fontanería, como conexiones de bases de datos y archivos de propiedades, etc. Confía en que su tercero lo haya probado adecuadamente, por lo que le gustaría omitirlo de su prueba dePokemonCaptureService
. Por lo tanto, debe ser burlado.Sin embargo, en otro momento y lugar, el colaborador
Pokeball
es una clase simple que introduce muy poca complejidad en el caso de prueba y puede incluirse fácilmente en la prueba. En este caso, puede decidir incluir una instancia real dePokeball
en laPokemonCaptureService
instancia que se está probando.No hay una regla dura y rápida. Depende de usted diseñar sus pruebas de la manera que le parezca mejor. Su objetivo es crear pruebas correctas y mantenibles lo más rápido posible. La experiencia es clave aquí. Escriba más pruebas y muy pronto obtendrá una buena intuición para ello.
fuente
Es difícil saber qué es exactamente lo que quieres probar porque, a juzgar por la pregunta, estás por todas partes. Por lo tanto, es difícil darle algún ejemplo práctico sobre cómo proceder que no sea llevarlo a artículos sobre cómo burlarse de cosas. Por lo tanto, debe ser más específico y dividir un poco las cosas:
¿Quieres probar para que el caché funcione correctamente?
¿Quieres probar alguna llamada de DB en particular?
¿Desea probar la aplicación para que esté usando el caché correctamente?
Una vez que decida exactamente cuál es la unidad que desea probar, entonces seleccionar qué hacer es fácil: en una prueba de unidad pura, todo menos la "unidad bajo prueba" debe ser burlado. La razón detrás de esto es que puede estar seguro de sus expectativas de instalación en los simulacros de que la unidad probada funciona como debería.
Aparte de eso, es posible que desee escribir algunas pruebas en JUnit que son pruebas de integración, es decir, usar menos simulacros. Incluso si se usan como comprobaciones de cordura para ver si el diseño del software es correcto, debe tener en cuenta que serán frágiles y no siempre darán ningún indicador sobre qué es exactamente lo que está mal con su aplicación o sistema.
fuente