Pregunta

Tengo algunas clases de repositorio que están destinadas a hablar con diferentes tipos de datos, derivando de un IRepository interfaz.

En las implementaciones, el código habla con una fuente de datos, ya sea un directorio de archivos XML o una base de datos o incluso un caché. ¿Es posible probar de manera confiable alguna de estas implementaciones? No veo que una implementación simulada funcione, porque solo estoy probando el código simulado y no el código real.

¿Fue útil?

Solución

No, usarías un simulacro cuando escribieras una clase que usos un IRepository. Para el implementación de IRepository, necesitaría probar con la fuente de datos apropiada. Para las bases de datos, eso es un poco doloroso: para un sistema de archivos, un poco menos.

Siempre que sea posible, si puede expresar su implementación en términos de transmisiones o lectores, le facilitará la vida: las pruebas para aquellas partes de la implementación pueden ir en contra de las fuentes de datos en memoria o las transmisiones de los recursos en el ensamblaje de la prueba. Por supuesto que probablemente necesitarás alguno Pruebas que van a una base de datos real o al sistema de archivos, pero con suerte menos.

Si llamaría a tales pruebas, o no las pruebas de "unidad" es una cuestión de cómo defina las pruebas unitarias; personalmente no me importa demasiado los nombres involucrados, pero yo hacer Se preocupa por tener pruebas. Para las bases de datos en particular, estas pueden ser algo dolorosas (especialmente si desea poder ejecutar pruebas en paralelo), pero también pueden ser increíblemente valiosos en mi experiencia.

Otros consejos

Creo que si está probando un código que realmente persiste o consulta datos, probablemente realmente desee presionar una base de datos.

Estas son pruebas de integración en lugar de pruebas unitarias.

Puede configurar una base de datos de prueba, en la que conoce el estado de los datos, y ejecutar las pruebas contra esto. Probablemente también desee decirle a las pruebas que son diferentes de sus pruebas unitarias y que no necesiten ejecutarse en cada check in (en Nunit puede decorar su clase de prueba con un atributo que le dice que no se ejecute)

En términos generales, no lo harás unidad Pruebe cualquier código cuyo único propósito sea hablar con una fuente de datos. Es posible que desee probar automáticamente el repositorio, pero dicha prueba será una prueba de integración por definición. Probablemente no desee ejecutar esas pruebas como parte de su "primer pase" se construye como EG configurando la base de datos y limpiando después de usted puede tomar una cantidad de tiempo no insignificante.

Si su repositorio tiene otras responsabilidades (por ejemplo, implementar el patrón de la unidad de trabajo), es posible que desee probarlas por separado.

En algún momento de la implementación del IREPository, utilizará una API de terceros que realmente leerá/escribirá a/desde Database/File/XML. Lo que desea hacer es burlarse de esas API para asegurarse de que su código llame a la API correcta en el orden correcto.

Entonces, si está leyendo desde la base de datos, puede burlarse de SQLConnection y SQLCommand y asegurarse de llamar a los métodos correctos en esas clases. Si está escribiendo en una transmisión, puede burlarse de la transmisión y asegurarse de enjuagarla y eliminarla (por ejemplo).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top