Tengo un servicio web que básicamente ejecuta algunos procedimientos almacenados, transforma los datos y los envía al navegador. Ningún mapeador de ORM elegante o algo así involucrado. Para poder escribir la prueba sin acceder a la base de datos, he hecho lo siguiente:Tropezar/burlarse de una base de datos en .Net
- He extraído todas las llamadas al DB en una clase. Los métodos devuelven solo los objetos DataSet y DataTable.
- Se ejecutó una llamada de muestra para cada método y se serializó el DataSet/DataTable en el disco.
- Se extrajo una interfaz que expone todos los métodos disponibles.
- Implementé una clase de base de datos falsa que simplemente carga los datos serializados y los devuelve.
Ahora tengo resultados de muestra serializados que puedo verificar con mi proyecto, y puedo usar la base de datos falsa en mis pruebas.
Esto funciona bastante bien para mí. ¿Hay algún marco que facilite la creación y carga de los datos de muestra? Mi proyecto actual es pequeño, pero usaría el mismo esquema en proyectos más grandes.
Actualización:
Obviamente todas las respuestas no están mal, pero pierden el punto. Conozco los conceptos básicos de las pruebas unitarias. Pero mi código está funcionando con DataTables, así que de alguna manera tendría que falsificar mis DataTables. Construir una DataTable desde el principio no es una tarea fácil, y podría aumentar mis pruebas y reducir la legibilidad. En mi caso, sería completamente imposible generar datos útiles de muestra a mano.
Por lo tanto, ejecuté algunas llamadas de muestra en una base de datos de muestra para obtener algunos DataTables. He serializado estas tablas en el disco y uso las versiones serializadas para crear mis DataTables falsos durante la prueba. De esa forma, las pruebas son independientes de la base de datos.
Existen diferentes opciones sobre cómo estructurar el código para facilitar la deserialización de las tablas. Pero esos son detalles de implementación que no necesitan discusión en este punto. Mi problema es el siguiente:
Administrar las llamadas de muestra y (de) serializar las tablas es un trabajo tedioso. Estaba buscando algunas herramientas para hacer esto más fácil.
Entonces, ¿qué exactamente están probando sus pruebas? que la clase de db falsa puede devolver datos falsos? o estás probando la transformación? –
Estoy probando la transformación. Esta parte de las pruebas asume que la base de datos está bien y me gustaría probar todo lo que sucede después de obtener el DataSet/DataTable de la base de datos. – Achim
Si está probando solo la transformación, idealmente aislaría el código para eso y escribiría pruebas unitarias estrictamente en ese código. –