Vine a esta página con la misma pregunta, sin embargo, la respuesta aceptada se ejecuta en todas las clases, y para mí no fue la respuesta correcta.
Si es como yo, su primera "prueba de integración" es borrar la base de datos y ejecutar las migraciones. Esto te lleva a una línea base de base de datos para todas las pruebas. En este momento estoy cambiando constantemente los archivos de migración, por lo que establecer la línea base es realmente parte de todas las pruebas.
La migración lleva un tiempo, por lo que no quiero que se ejecute en todas las pruebas.
Luego tuve que construir la base de datos probando cada pieza. Necesito escribir una prueba de pedido, pero primero necesito crear algunos productos y probar eso, luego tengo que probar una función de importación.
Por lo tanto, lo que hice es SUPER fácil, pero no muy bien explicado en Internet. Creé una prueba simple para configurar la base de datos. A continuación, en el archivo de phpspec.xml añadir un banco de pruebas ....
<testsuite name="Products">
<file>tests/in/SystemSetupTest.php</file>
<file>tests/in/ProductTest.php</file>
<file>tests/in/ProductImportTest.php</file>
</testsuite>
Y en el del SystemSetupTest.php ....
class SystemSetupTest extends ApiTester
{
/** @test */
function system_init()
{
fwrite(STDOUT, __METHOD__ . "\n");
self::createEM(); //this has all the code to init the system...
}
}
luego ejecutarlo como:
PHPUnit - -testsuite Productos
Al final, es mucho más fácil. Me permitirá construir mi sistema correctamente.
Además estoy usando laravel 5. Al usar setUpBeforeClass()
termino con problemas de arranque, que estoy seguro de que puedo arreglar, pero el método que uso arriba funciona perfecto.
Entiendo completamente la necesidad de hacer esto a veces por el rendimiento. Se recomienda evitar esto si es posible para que no comparta el estado entre las pruebas. –
@Greg: estoy de acuerdo. Aún así, hay situaciones en las que es mejor inicializar una vez para todas las pruebas (para establecer una conexión con el DB, por ejemplo). – snakile
Intento evitar la necesidad de un servidor de base de datos burlando el adaptador Zend_Db/PDO en mi mapeador de datos, luego ejecuto las afirmaciones en el SQL que producen mis clases. Agradezco a veces que sea inevitable para las pruebas funcionales/de extremo a extremo. –