2011-08-10 23 views
8

Estoy tratando de construir pruebas unitarias para mi proyecto Yii.Mock MySQL DB para PHPUnit

Problema: base de datos MySQL. No quiero tener que ejecutar una base de datos MySQL cada vez que ejecuto las pruebas, ya que es lento, poco confiable, tal vez algunos miembros del equipo no lo tienen configurado, etc.

Parece que hay una manera de hacer una base de datos SQLite en la memoria y usar eso, pero el SQL producido por Yii no parece funcionar en SQLite de la misma manera que en MySQL. Recibo muchos errores

En resumen: quiero burlarme de una base de datos MySQL en la memoria.

¿Cómo puedo hacer esto?

Respuesta

5

Encapsule sus operaciones de MySQL en un Data Access Object. No solo oculta el SQL de su lógica comercial que tiene otros beneficios, puede usar mock DAO al probar el resto de la aplicación. Mocks no requerirá una base de datos y le permitirá validar que la lógica comercial está haciendo las llamadas correctas a la capa de datos.

Esto es similar a la respuesta de Mchl pero mueve la burla de una capa. Encuentro que es mucho más fácil burlarse de findUserByEmail() que de los diversos métodos mysqli. Puede dejar la verificación SQL en las pruebas DAO y ejecutarla contra la base de datos en sus pruebas de integración.

1

Una forma de hacerlo es burlarse de su objeto de conexión y comprobar si se llama al método query() con el SQL esperado. Sin embargo, necesita otra forma de validar que el SQL que está esperando sea correcto. Esto se puede hacer como un grupo separado de pruebas (o incluso trasladadas fuera de su conjunto de pruebas) para que no se ejecute con todas las demás pruebas.

Cuestiones relacionadas