2010-11-24 9 views
10

Tengo una clase DBHandler que toma una consulta, la ejecuta a través del servidor SQL, comprueba si hay errores y devuelve el resultado. ¿Cómo puedo probar la unidad esta clase?¿Cómo se prueba una consulta SQL?

Editar: Voy a tratar de ser más precisos: DBHandler es el encargado de transmitir la consulta al servidor. Para probar que realmente hace eso, arroja las excepciones correctas, etc., quiero conectarlo a un DB falso que poblaré. Mi pregunta es: ¿cómo hacer eso? ¿Cómo puedo crear un simulacro de "servidor" que maneje llamadas?

+0

¿Puede ser más específico? – duffymo

+0

@duffymo este es un plan, no lo he implementado todavía. Mi pregunta es más precisa: ¿cómo simulo un servidor SQL para devolver Consultas, etc.? –

+0

¿Por qué simular un servidor SQL? Está probando un DBHandler: envíe las solicitudes a la base de datos real. No hay necesidad de burlarse de tal cosa. – duffymo

Respuesta

7

Simplemente pase una consulta SQL y compare el resultado devuelto con el resultado esperado. Sencillo. JUnit es un marco de prueba de unidad, puede utilizar eso.

Para pruebas de unidades de base de datos sofisticadas, mira DBUnit.

+4

No es simple, el resultado esperado probablemente dependerá del contenido de la base de datos. Si realmente está tomando esta ruta, debe tener una base de datos de solo desarrollo y ponerla en un estado conocido antes de comenzar las pruebas.El problema con este enfoque es que las pruebas tomarán mucho tiempo para cualquier problema no trivial. – stivlo

+0

@stivlo: Por lo general, no tomamos una base de datos de desarrollo, pero tenemos una base de datos de prueba. Sí, ejecutar un conjunto completo de DBUnit puede llevar mucho tiempo, pero eso es aceptable. Ejecutar un par de pruebas, durante la codificación, no toma mucho tiempo. –

+1

Hola Adeel, de acuerdo, por lo que podría ser una buena idea separar suite (s) que son pruebas unitarias reales (sin pruebas de db), de pruebas funcionales (prueba db incluida). – stivlo

0

Querrá utilizar una base de datos de prueba en memoria que cree y complete en la configuración o que todas sus pruebas sean transaccionales para que no alteren su base de datos de prueba.

Tendrá que preocuparse por la presencia de datos.

Si está utilizando Spring, tienen soporte para pruebas de unidades transaccionales.

No está claro lo que estás preguntando. Ya sabes sobre JUnit. ¿Qué crees que te estás perdiendo?

4

Usaría la inyección de dependencia para pasar la conexión de la base de datos o algo similar, de modo que todo el asunto se pueda burlar en las pruebas. Luego puede escribir pruebas donde la consulta simulada arroja excepciones, devuelve varios errores o resultados válidos. Entonces, sus pruebas solo están comprobando que DBHandler funciona correctamente.

0

Una solución rápida para una maqueta obras db como este:

  • instalación de un servidor de prueba HSQLDB independiente de su aplicación.

  • Rellenar con datos de prueba.

  • Utilice el código condicional donde se conecta a su base de datos real, a conéctese al servidor de prueba. Una propiedad en su aplicación puede controlar esto.

  • Pruebe la aplicación

Cuestiones relacionadas