125 votes

Comment ignorer les tests dans PHPunit ?

Je suis en train d'utiliser phpunit en relation avec jenkins, et je veux sauter certains tests en définissant la configuration dans le fichier XML phpunit.xml

Je sais que je peux utiliser en ligne de commande:

phpunit --filter testStuffThatBrokeAndIOnlyWantToRunThatOneSingleTest

comment puis-je traduire cela dans le fichier XML puisque la balise est seulement pour la couverture de code?

Je voudrais exécuter tous les tests sauf testStuffThatAlwaysBreaks

1 votes

KO: Que diriez-vous de réparer le test? au fait, salut de Welly ;-)

1 votes

Je n'ai pas écrit les tests, c'est quelque chose d'irrélevant, et je ne veux pas non plus modifier les fichiers principaux

0 votes

Douteusement vous pouvez le faire. C'est une exigence très étrange

237voto

jsteinmann Points 763

La manière la plus rapide et la plus simple de passer des tests qui sont soit cassés, soit sur lesquels vous devez continuer de travailler ultérieurement est simplement d'ajouter ce qui suit en haut de votre test unitaire individuel :

$this->markTestSkipped('doit être révisé.');

0 votes

Vous pouvez toujours ajouter des répertoires ou des tests au fichier de configuration XML, cependant, si c'est un contrôleur ou similaire, ce n'est vraiment pas très pratique car vous avez probablement des dizaines d'autres tests dans ce fichier. Je suppose que si vous n'avez pas accès aux tests unitaires, je ne comprends pas pourquoi, alors vous n'avez pas d'autre choix que d'exclure.

7 votes

Comme il s'agit d'une méthode statique (au moins dans PHPUnit 3), et que certaines classes utilisent late static binding afaik, vous devriez utiliser static::markTestSkipped(''); au lieu de $this->. Cela générera un avertissement dans les nouvelles versions de PHP. Signature: public static function markTestSkipped($message = '')

0 votes

Besoin d'un meilleur exemple du fichier de test unitaire complet. Pas seulement un extrait.

38voto

zerkms Points 105994

Si vous pouvez ignorer tout le fichier alors

            ./tests/
            ./tests/path/to/excluded/test.php
                ^-------------

1 votes

Les tests prennent environ 20min pour s'exécuter, y a-t-il un moyen facile de voir combien de tests seront exécutés ? Actuellement, je dois attendre que la première ligne soit terminée ....... 63 / 893 ( 7%)

5 votes

@Filype : alors vous avez probablement spécifié le mauvais chemin. Ça marche bien pour moi. Je ne suis pas sûr s'il est possible d'obtenir le nombre de tests. PS : les tests unitaires ne devraient pas être si longs. Je vous recommande d'utiliser l'annotation @group et de diviser les tests en fonction de leur nature

28voto

Parfois, il est utile de sauter tous les tests d'un fichier particulier en fonction de condition(s) personnalisée(s) définie(s) en tant que code PHP. Vous pouvez facilement le faire en utilisant la fonction setUp dans laquelle makeTestSkipped fonctionne également.

protected function setUp()
{
    parent::setUp();

    if (votre_condition_personnalisée) {
        $this->markTestSkipped('tous les tests de ce fichier sont inactifs pour cette configuration de serveur !');
    }
}

votre_condition_personnalisée peut être transmise via une méthode/propriété de classe statique, une constante définie dans le fichier d'amorçage de phpunit ou même une variable globale.

Remarque : N'oubliez pas d'appeler parent::setUp() (voir docs).

0 votes

Qu'est-ce qu'une classe Config? Où dois-je la placer?

0 votes

@cronfy cela peut être n'importe quelle classe accessible dans une portée globale (modèle Singleton / Registre) ou même une variable globale définie dans le fichier bootstrap de phpunit. Fondamentalement, la logique est : if ($testsFromThisFileShouldBeSkipped) { $this->markTestSkipped(...); }

0 votes

Supprimez la condition et votre réponse sera directe... "markTestSkipped à l'intérieur de la configuration pour sauter tout le fichier"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X