2011-07-08 6 views
28

Estoy tratando de comenzar con Symfony2 y he estado tratando de configurar pruebas automatizadas para la capa de modelo de mi aplicación. El libro de Symfony2 habla de pruebas unitarias para controladores, pero no puedo encontrar muchos ejemplos de pruebas de modelos.¿Cómo configurar los accesorios de Doctrine2 cuando se prueba con PHPUnit?

Me gustaría tener un conjunto de datos limpios a trabajar antes de cada ejecuciones de prueba y que se encuentran estos artículos:

Basado en el artículo I sznapka.pl tener una prueba realmente ejecutándose sin errores, pero aunque se crea el esquema de prueba, los dispositivos no se cargan. No puedo ver por qué, ni siquiera una forma de solucionar esto.

Antecedentes: Anteriormente trabajé con CakePHP, donde la carga de los dispositivos se maneja en gran medida de forma automática, ¿quizás tengo un enfoque incorrecto para Symfony/Doctrine?

+0

(Empezando a sentirme culpable por abandonar esta pregunta.) Tuvo que alejarse de las exploraciones de Symfony para otros proyectos, pero espero volver pronto. Mi sensación en este momento es que un enfoque más ligero en Symfony es más apropiado, como lo sugiere jules a continuación. Por ejemplo, no es necesario que probemos la capa de persistencia y siempre debemos tratar de probar alrededor de los bordes del gráfico de objetos. – contrebis

Respuesta

6

Sí DoctrineFixtures es una buena opción.

Para probar el modelo: realmente no necesita cargar accesorios en la base de datos, debe crear objetos con los datos que desee (inyectándolos con los ajustadores).

Para controlador de ensayo: accesorios doctrina cargar y usar doctrine transactions por lo que el estado de su base de datos es la misma antes de cada caso de prueba, iniciar la transacción en setUp() y rollback en tearDow(). (Si su controlador también usa transacciones, aún no he encontrado una buena solución).

Por error en los accesorios, si no tiene ningún error y sus dispositivos no están cargados, es posible que haya olvidado una convención de nomenclatura. ¿Puedes mostrarnos algún código?

4

Eche un vistazo a this solution. No creo que usar transacciones sea la mejor idea, ya que es probable que use transacciones en su código. Esta solución sugiere cargar accesorios manualmente en cada prueba.

3

Hay una muy útil LiipFunctionalTestBundle que simplifica el trabajo con una instalación en prueba. La idea básica es crear una base de datos cada vez que ejecutas las pruebas y luego cargas los accesorios. Ahora puede guardar los modelos, eliminar, cada prueba será la misma.

Cuestiones relacionadas