Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
Voilà j'ai suivi un tuto de pascal Martin sur Jenkins et l'intégration continue :
http://blog.pascal-martin.fr/post/integ … et-phpunit
Cela m'a permis de créer mon build aux petits oignons.
Mais j'ai juste un souci.
En effet, mon projet est sous ZF2, donc les tests unitaires sont effectués module par module ce qui est problématique si j'utilise cette syntaxe, qui ne marche que pour un seul module :
[lang=xml] <target name="phpunit"> <exec logoutput="true" dir="${project.basedir}/${source}/Maintenance/tests" command="phpunit" escape="false" /> </target>
Quel serait le moyen le plus approprié pour d'une part exécuter mes tests pour plusieurs modules ? et obtenir un rapport coverage global ?
Merci.
Dernière modification par amelie (20-10-2015 10:43:09)
Hors ligne
Salut,
Ce que tu demandes, j'avais galéré pour l'implémenter également,
J'ai réglé le soucis depuis maintenant 1 an. Mais ce ne fut pas évident et mon code a bien évolué depuis mais je me suis inspiré de tout cela pour faire ma solution :
- https://samsonasik.wordpress.com/2013/1 … unit-test/
- http://stackoverflow.com/questions/1662 … ntegration
- http://stackoverflow.com/questions/1455 … ot-working
- https://gist.github.com/Ocramius/3994325
EDIT : Le dernier lien est le gist d'Ocramius pour comprendre comment il as crée sont architecture des tests unitaires, je m'en suis inspiré largement, et mes Bootstrap de module ressemble de très près a ce qu'il as pu faire.
Voici ma question sur stack overflow traitant du problème :
- http://stackoverflow.com/questions/2257 … ple-module
Et ma solution aujourd'hui de façon synthétique est celle ci :
j'ai un dossier test à la racine du projet ou mon build.xml pointe dessus avec ce code :
[lang=xml] <target name="phpunit" description="Lancement des tests unitaires"> <exec logoutput="true" dir="${basedir}/tests" executable="phpunit"/> </target>
Ensuite mon fichier phpunit.xml est comme suit
[lang=xml] <?xml version="1.0" encoding="UTF-8"?> <phpunit bootstrap="Bootstrap.php" colors="true" stopOnError="true" stopOnFailure="false" strict="true" verbose="true"> <testsuites> <testsuite name="All Modules"> <directory>../module/*/tests/*Test</directory> </testsuite> </testsuites> <filter> <blacklist> <directory suffix=".php">../vendor</directory> <directory suffix=".php">../config</directory> <directory suffix=".php">../data</directory> <directory suffix=".php">../module/*/src/*/Controller</directory> <file>../module/*/Module.php</file> <file>../module/*/src/*/Factory/*ControllerFactory.php</file> <directory suffix=".php">../module/*/tests/*</directory> </blacklist> </filter> <php> <ini name="memory_limit" value="2047M" /> </php> <logging> <log type="coverage-html" target="../build/tests/coverage/" charset="UTF-8" yui="true" highlight="false" lowUpperBound="35" highLowerBound="70"/> <log type="coverage-clover" target="../build/tests/clover.xml"/> <log type="junit" target="../build/tests/junit.xml" logIncompleteSkipped="false"/> </logging> </phpunit>
tu peux voir qu'il demande un bootstrap.php voici le mien :
[lang=php] <?php $modules = include('../config/autoload/modules.global.php'); $moduleToNotTest = array( 'DoctrineModule', 'DoctrineORMModule', 'ZendDeveloperTools', 'TwbBundle', 'ReverseProxy', 'ZfcDatagrid', 'SlmQueue', 'SlmQueueDoctrine', 'ZfcDatagrid', 'Reporting' ); foreach ($modules as $module) { if (!in_array($module, $moduleToNotTest)) { require_once __DIR__ . "/../module/{$module}/tests/{$module}Bootstrap.php"; } }
Mais ce fichier bootstrap est spécial, en fait je charge un fichier module.global.php qui retourne un tableau de tous mes modules lancé, et parmi eux, certains que je ne veux pas tester, de ce fait quand je ne veux pas les tester le code n'inclut pas le bootstrapTest du module en question.
Et si ton architecture de test ressemble a celle que j'ai cela devrait marcher.
Hors ligne
Salut,
Merci pour ta réponse, super c'est exactement ce que je cherchais !
Si je comprends bien ta démarche, tu as crée un dossier "tests" à la racine (déclaré dans ton build), dans lequel tu as mis ton phpunit.xml qui fait appel dans ce même dossier à un "bootstrap collectif" qui lui-même va appeler, via un fichier de conf et ce Bootstrap, les Bootstraps des modules ... ?
Dernière modification par amelie (06-07-2015 17:15:37)
Hors ligne
Salut,
C'est ça !
Hors ligne