Je suis arrivé sur cette page avec la même question, cependant la réponse acceptée s'applique à toutes les classes, et pour moi ce n'était pas la bonne réponse.
Si vous êtes comme moi, votre premier "test d'intégration" consiste à vider la base de données et exécuter les migrations. Cela vous permet d'avoir une base de données de référence pour tous les tests. Je change constamment les fichiers de migration à ce stade, donc la configuration de la base de référence fait réellement partie de tous les tests.
La migration prend du temps, donc je ne veux pas qu'elle soit exécutée pour tous les tests.
Ensuite, j'ai dû construire la base de données en testant chaque élément. Je dois écrire un test sur les commandes, mais d'abord je dois créer quelques produits et les tester, puis je dois tester une fonction d'import.
Donc, ce que j'ai fait est SUPER facile, mais ce n'est pas expliqué de manière très claire sur internet. J'ai créé un simple test pour configurer la base de données. Ensuite, dans votre fichier phpspec.xml, ajoutez un testsuite....
tests/in/SystemSetupTest.php
tests/in/ProductTest.php
tests/in/ProductImportTest.php
Et dans le fichier 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...
}
}
Ensuite, exécutez-le comme :
phpunit --testsuite Products
En fin de compte, c'est beaucoup plus simple. Cela me permettra de construire mon système correctement.
De plus, j'utilise laravel 5. Lorsque j'utilise setUpBeforeClass()
, je rencontre des problèmes de démarrage, que je suis sûr de pouvoir résoudre, mais la méthode que j'utilise ci-dessus fonctionne parfaitement.