web-dev-qa-db-fra.com

Comment exécuter une méthode de test unique avec phpunit?

Je ne parviens pas à exécuter une seule méthode de test nommée testSaveAndDrop dans le fichier escalation/EscalationGroupTest.php avec phpunit. J'ai essayé les combinaisons suivantes: 

phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=escalation/EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=testSaveAndDrop

Dans chaque cas, les méthodes all test du fichier escalation/EscalationGroupTest.php sont exécutées. Comment choisir une seule méthode à la place?

Le nom de la classe est EscalationGroupTest et la version de phpunit est 3.2.8.

227
Alex

La commande suivante exécute le test sur une seule méthode: 

phpunit --filter testSaveAndDrop EscalationGroupTest escalation/EscalationGroupTest.php

phpunit --filter methodName ClassName path/to/file.php
325
Alex

Je préfère marquer le test dans l'annotation comme

/**
 * @group failing
 * Tests the api edit form
 */
public function testEditAction()

Puis l'exécuter avec

phpunit --group failing

Inutile de spécifier le chemin complet dans la ligne de commande, mais vous devez vous souvenir de l'avoir supprimé avant de commettre, pour ne pas encombrer le code.

Vous pouvez également spécifier plusieurs groupes pour un seul test.

/**
  * @group failing
  * @group bug2204 
  */
public function testSomethingElse()
{
}
181
iamtankist

Voici la réponse plus générique:

Si vous êtes certain que le nom de la méthode est unique, vous ne pouvez filtrer que par nom de méthode (cela fonctionne pour moi)

phpunit --filter {TestMethodName}

Cependant, il est plus sûr de spécifier le chemin du fichier/référence aussi

phpunit --filter {TestMethodName} {FilePath}

Exemple: 

phpunit --filter testSaveAndDrop reference/to/escalation/EscalationGroupTest.php

Remarque rapide: j'ai remarqué que si j'ai une fonction nommée testSave et une autre fonction nommée testSaveAndDrop à l'aide de la commande phpunit --filter testSave exécutera également testSaveAndDrop et toute autre fonction commençant par testSave*, c'est étrange!

97
Mahmoud Zalt

La commande suivante exécutera exactement testSaveAndDrop test. 

phpunit --filter '/::testSaveAndDrop$/' escalation/EscalationGroupTest.php
32
Farid Movsumov

Donc, quelque chose comme ça

phpunit --filter 'EscalationGroupTest::testSaveAndDrop' EscalationGroupTest escalation/EscalationGroupTest.php 

Sans = et avec '

https://phpunit.de/manual/3.7/fr/textui.html

16
sectus

Vous pouvez essayer cela, je suis en mesure d'exécuter des cas de test simples 

phpunit tests/{testfilename}

Par exemple:

phpunit tests/StackoverflowTest.php

Si vous souhaitez exécuter des tests simples dans Laravel 5.5, essayez

vendor/bin/phpunit tests/Feature/{testfilename} 

vendor/bin/phpunit tests/Unit/{testfilename} 

Par exemple:

vendor/bin/phpunit tests/Feature/ContactpageTest.php 

vendor/bin/phpunit tests/Unit/ContactpageTest.php
8
Amit Yadav

Si vous êtes sur Netbeans, vous pouvez cliquer avec le bouton droit de la souris sur la méthode de test et cliquer sur "Exécuter la méthode de test ciblée".

Run Focused Test Method menu

7
Tony

pour exécuter phpunit test à laravel par de nombreux moyens .. 

vendor/bin/phpunit --filter methodName className pathTofile.php

vendor/bin/phpunit --filter 'namespace\\directoryName\\className::methodName'

pour test classe unique:

vendor/bin/phpunit --filter  tests/Feature/UserTest.php
vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest'
vendor/bin/phpunit --filter 'UserTest' 

pour test méthode unique:

 vendor/bin/phpunit --filter testExample 
 vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest::testExample'
 vendor/bin/phpunit --filter testExample UserTest tests/Feature/UserTest.php

pour les tests d'exécution de toutes les classes de l'espace de noms: 

vendor/bin/phpunit --filter 'Tests\\Feature'

pour plus de chemin exécuter test voir plus

6
Jignesh Joisar

Tous les tests sont exécutés parce que vous avez l'indicateur --filter après le nom du fichier. PHPUnit ne lit pas du tout les options et exécute tous les cas de test.

Depuis l'écran d'aide:

 Usage: phpunit [options] UnitTest [UnitTest.php]
        phpunit [options] <directory>

Déplacez donc l'argument --filter avant le fichier de test souhaité, comme indiqué dans les réponses @Alex et @ @ Ferid Mövsümov. Et vous ne devriez avoir que le test que vous voulez exécuter.

4
Schleis

Si vous utilisez un fichier de configuration XML, vous pouvez ajouter les éléments suivants dans la balise phpunit:

<groups>
  <include>
    <group>nameToInclude</group>
  </include>
  <exclude>
    <group>nameToExclude</group>
  </exclude>
</groups>

Voir https://phpunit.de/manual/current/en/appendixes.configuration.html

1
user276648

Vous devez utiliser --filter pour exécuter une seule méthode de test php phpunit --filter "/::testMethod( .*)?$/" ClassTest ClassTest.php

Le filtre ci-dessus exécutera testMethod seul.

0
Umair Anwar