2010-10-26 13 views
5

Esto probablemente se ha hecho muchas veces, pero aquí va:Como unidad de la clase de base de datos de prueba

tengo una clase llena de conexiones db

conexión abierta
db
valores leídos consulta
cerca conexión

¿Cómo debo probar esta unidad?

¿Necesito crear una base de datos falsa? Supongo que podría burlarme de las clases de MySql (para C#), pero eso también es mucho trabajo.

Algunas de las declaraciones son "INSERT INTO", ¿qué debo hacer al respecto?

+3

Si cree que una pregunta se le pudo haber hecho antes, debe [buscarla] (http://stackoverflow.com/search?q=unit+test+database+class). – meagar

Respuesta

7

Las cosas que son difíciles de probar suelen ser tightly coupled o no siguen el Single Responsibility principle.

Primero de todos. Divida su capa de datos. Mira el repository pattern. Cada entidad (tabla o vista) debe tener su propia clase de búsqueda de datos.

Utilice las interfaces de datos en lugar de la implementación del controlador específico: IDbConnection en lugar de SqlConnection. Use DbProviderFactory para obtener la implementación de conexión adecuada. Luego use connection.CreateCommand() para obtener un comando, etc.

Hacer todo eso haría que fuera mucho más fácil probar su capa de datos. Y recuerde, el datalyer no debe tener ninguna lógica. Su único propósito es cargar datos desde una fuente de datos.

Pero si no quiere cambiar nada: trabajar contra una base de datos es la manera más fácil. Elimine todos los datos e inserte nuevos datos de prueba antes de cada prueba (para eliminar cualquier cambio durante una prueba anterior).

+0

está bien, pero ten cuidado si esas pruebas unitarias se ejecutan en paralelo: en ese momento, la segunda prueba borrará los datos requeridos por la primera prueba. Esto puede suceder si se cambia el marco de prueba o cuando una nueva versión cambia la secuencia de ejecución de prueba. He depurado este problema exacto recientemente. –

2

Lo más fácil sería crear una nueva prueba db y hacer algunas inserciones y luego almacenar los conjuntos de resultados en una lista o algo así y luego simplemente ejecutarlo con el depurador para ver si almacena el conjunto de resultados en la lista que tiene creado.

No tiene ningún intsert en el código fuente, utilice los estudios de administración SQL y haga las inserciones allí hasta que sepa que las conexiones y todo funciona. Solo tabure todos esos valores por ahora.

0

Puede usar una base de datos MySql en vivo que se ejecute localmente en su máquina.

he hecho un paquete Nuget para este fin, que se puede añadir a su proyecto: https://github.com/stumpdk/MySql.Server

se inicia un servidor MySQL local cada vez que ejecute sus pruebas. Es rápido, brinda una solución que su equipo puede compartir y no tiene que perder el tiempo instalando un servidor.

Cuestiones relacionadas