Al escribir pruebas, ¿por qué alguien querría usar una base de datos en memoria en lugar de simplemente burlarse de los datos?
Pude ver que las bases de datos en memoria podrían ser beneficiosas para probar los repositorios de uno. Pero si se utiliza un marco (como Spring Data), probar los repositorios sería probar el marco y no realmente la lógica de la aplicación.
Sin embargo, la burla parece más rápida y sigue el mismo patrón que generalmente se emplea al escribir pruebas unitarias y TDD.
Entonces, ¿qué me estoy perdiendo? ¿Cuándo / por qué sería beneficiosa una base de datos en memoria?
La mayoría de las veces, las pruebas de bases de datos en memoria son más simples que las burlas. También es mucho más flexible. Y también prueba que los archivos de migración estén bien (cuando hay archivos de migración).
Vea este pseudocódigo:
El
InMemoryTest
no depende de cómoDatabase
se implementa en elUserRepository
trabajo. Simplemente usa laUserRepository
interfaz pública (create
) y luego afirma contra ella. Esa prueba no se romperá si cambia la implementación, pero es más lenta.Mientras tanto,
MockingDBTest
depende totalmente de cómoDatabase
se implementaUserRepository
. De hecho, si cambia la implementación pero aún así hace que funcione de otra manera, esa prueba se rompería.Lo mejor de ambos mundos sería usar una falsa implementación de la
Database
interfaz:Eso es mucho más expresivo, más fácil de leer y entender, y no depende de la implementación de la base de datos real realizada en las capas superiores del código.
fuente