web-dev-qa-db-fra.com

Comment puis-je demander à phpunit d'exécuter des tests à partir de tous les fichiers d'un dossier?

D'après ce que j'ai lu, il semble que je devrais pouvoir créer un dossier, par exemple tests /, mettez-y quelques fichiers avec les classes de tests unitaires, puis exécutez phpunit sur ce fichier et demandez-lui de trouver et d'exécuter les tests.

Pour une raison quelconque, dans mon installation (sur OS X), il pense que le dossier teste/est un fichier, ou alors il semblerait:

$ ls tests
test1.php test2.php
$ phpunit tests/test1.php
PHPUnit 3.5.3 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) FailingTest::testFail
Your test successfully failed!

/Users/****/tmp/tests/test1.php:4

FAILURES!
Tests: 1, Assertions: 0, Failures: 1.
$ phpunit tests/test2.php
PHPUnit 3.5.3 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 5.00Mb

OK (1 test, 1 assertion)
$ phpunit tests
PHP Fatal error:  Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "tests.php" nor "tests.php" could be opened.' in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php:102
Stack trace:
#0 /usr/local/PEAR/PHPUnit/TextUI/Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('tests', '')
#1 /usr/local/PEAR/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true)
#2 /usr/local/bin/phpunit(53): PHPUnit_TextUI_Command::main()
#3 {main}
  thrown in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php on line 102

Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "tests.php" nor "tests.php" could be opened.' in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php:102
Stack trace:
#0 /usr/local/PEAR/PHPUnit/TextUI/Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('tests', '')
#1 /usr/local/PEAR/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true)
#2 /usr/local/bin/phpunit(53): PHPUnit_TextUI_Command::main()
#3 {main}
  thrown in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php on line 102

J'ai ce que j'espère être une installation assez standard de phpunit via PEAR, en suivant ces instructions http://www.newmediacampaigns.com/page/install-pear-phpunit-xdebug-on-macosx-snow-leopard , sur OS X Snow Leopard.

$ pear version
PEAR Version: 1.9.1
PHP Version: 5.3.2
Zend Engine Version: 2.3.0
Running on: **** 10.4.0 Darwin Kernel Version 10.4.0: Fri Apr 23 18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386 i386
$ phpunit --version
PHPUnit 3.5.3 by Sebastian Bergmann.

J'espère que quelqu'un d'autre a rencontré ce problème et c'est juste une solution simple, ou bien je fais juste quelque chose de mal?

41
jsdalton

Ce n'est pas un bug, c'est une fonctionnalité.

Vous avez un répertoire plein de fichiers .php, dans votre cas, ils contiennent tous des testcases.

Mais au fur et à mesure que votre suite de tests se développe, vous voudrez probablement avoir d'autres fichiers php dans le répertoire tests, des fichiers qui ne contiennent pas de tests, qui existent uniquement pour prendre en charge les tests. Ces fichiers ne doivent jamais être exécutés par PHPUnit lui-même.

Il s'agit d'un scénario très courant.

Alors, comment PHPUnit pourrait-il savoir quels fichiers il doit exécuter et lesquels ne le sont pas? Vérifier le suffixe du nom de fichier est une option pour le faire - par défaut PHPUnit considère tout avec un nom se terminant par Test.php comme étant un test et ignore tout le reste.

Vous pouvez changer ce comportement si vous le souhaitez vraiment - en créant un fichier nommé phpunit.xml dans votre répertoire de tests avec le contenu suivant

<?xml version="1.0" encoding="utf-8" ?>
<phpunit>
<testsuite name='Name your suite'>
    <directory suffix='.php'>./</directory>
</testsuite>
</phpunit>

Une fois que vous avez fait cela, PHPUnit exécutera tous les fichiers avec '.php' à la fin du nom de fichier (dans ce contexte, l'extension de fichier est considérée comme faisant partie du nom de fichier)

Mais il vaut vraiment mieux s'habituer à la convention et nommer vos tests en conséquence.

65
Anti Veeranna

La manière la plus simple d'exécuter le test sur le dossier est d'ajouter "Test.php" à la fin de tous vos tests et d'exécuter phpunit en spécifiant votre dossier comme ceci

phpunit .

ou

phpunit your_test_folder/.
26
Gonzalo Cao

Petite bizarrerie ennuyeuse, mais je l'ai compris.

Au moins avec la configuration par défaut, les fichiers de test doivent se terminer par "Test.php", par exemple. fooTest.php, ou ils ne sont pas trouvés par le testeur.

24
jsdalton