Est-il possible de marquer un test comme "attendu à l'échec" avec PHPUnit? Cela serait utile lors de l'exécution de TDD, et vous voulez faire la distinction entre les tests réellement échoués, et les tests qui échouent parce que le code associé n'a pas encore été écrit.Comment indiquer qu'un test PHPUnit échoue?
Répondre
Je pense que dans ces cas, il est assez standard pour marquer simplement le test sautée. Vos tests seront toujours exécutés et la suite passera, mais le coureur de test vous alertera des tests sautés.
http://phpunit.de/manual/current/en/incomplete-and-skipped-tests.html
Si vous voulez avoir un échec du test mais sachez que son échec était attendu, vous pouvez add a message to the assertion qui sortira dans les résultats:
public function testExpectedToFail()
{
$this->assertTrue(FALSE, 'I knew this would happen!');
}
Dans les résultats:
There was 1 failure:
1) testExpectedToFail(ClassTest)
I knew this would happen!
Cela provoquerait l'échec de la suite, ce qui ne semble pas être le résultat souhaité. –
La question mentionnée TDD, dans laquelle vous écrivez des tests échouant contre le code qui n'existe pas. –
$ this-> fail ('Je savais que cela arriverait!'); est un raccourci pour ça :). –
Je pense vraiment que c'est une mauvaise pratique, mais vous pouvez tromper PHPUnit cette façon:
/**
* This test will succeed !!!
* @expectedException PHPUnit_Framework_ExpectationFailedException
*/
public function testSucceed()
{
$this->assertTrue(false);
}
Plus proprement:
public function testFailingTest() {
try {
$this->assertTrue(false);
} catch (PHPUnit_Framework_ExpectationFailedException $ex) {
// As expected the assertion failed, silently return
return;
}
// The assertion did not fail, make the test fail
$this->fail('This test did not fail as expected');
}
Le code ci-dessus fonctionne, mais je devais attraper 'PHPUnit_Framework_AssertionFailedError', pas' PHPUnit_Framework_ExpectationFailedException' –
c'est une bonne pratique si vous testez réellement une assertion elle-même, par exemple testAssertEqual_fail: D afin que vous puissiez vérifier vos affirmations personnalisées échouent comme prévu, mais pour genral utilisez, vous faites quelque chose de mal – aqm
La méthode 'correcte' de la manipulation est d'utiliser $this->markTestIncomplete()
. Cela marquera le test comme incomplet. Il reviendra comme passé, mais il affichera le message fourni. Voir http://www.phpunit.de/manual/3.0/en/incomplete-and-skipped-tests.html pour plus d'informations.
La question est sur TDD, où vous écrivez (idéalement complète) des tests avant le code principal. Cependant, 'markTestIncomplete' est pour quand vous avez un « test inappliquées »(http://phpunit.de/manual/3.7/en/incomplete-and-skipped-tests.html commence par la description d'une méthode d'essai pour un test vide inappliquées , explique ensuite comment cela conduit à un faux succès). –
Le commentaire par soixante-neuf ci-dessus est presque parfait pour ce que je cherchais. méthode
fail() est utile lorsque vous définissez un test pour une exception prévue et si elle n'a pas déclenché l'exception que vous voulez que l'échec du test.
$this->object->triggerException();
$this->fail('The above statement was expected to trigger and exception.');
Bien sûr, l'exception triggerException est remplacée par quelque chose dans votre objet.
- 1. Comment faire PHPUnit faire quelque chose si une assertion échoue
- 2. Zend Framework, HelperBroker Test PHPUnit
- 3. UnitTests échoue, passe test manuel
- 4. Test d'unité Objets Doctrine avec PHPUnit
- 5. Test de plusieurs classes avec PHPUnit
- 6. Test de multiples exceptions avec PHPUnit
- 7. Test des classes statiques avec PHPUnit
- 8. Test des entrées de formulaire dans PHPUnit
- 9. PHPUnit, Test "Se comporte comme un ..."
- 10. Test de base de données PHPUnit
- 11. Test Rake échoue
- 12. Comment utiliser ce test PHPUnit Fichier "étendre PHPUnit_Framework_TestCase"
- 13. Comment remplacer var_export dans PHPUnit?
- 14. La génération du rapport de couverture de code PHPUnit échoue
- 15. tests email PHPUnit
- 16. PHPUnit Test d'exception, message d'erreur salissant la sortie des résultats
- 17. PHPUnit: Test d'une classe d'usine avec une dépendance
- 18. Erreur DomDocument :: loadHTML() lors de l'exécution du test phpunit
- 19. Utilisation des scripts de test de OpenID libid. (PHPUnit)
- 20. Peut-on sauver le résultat du test PHPUnit
- 21. commande echo introuvable lors du test du sélénium avec phpunit
- 22. PHPunit Résultat du test global 0 ou 1 (vrai/faux)
- 23. Paramètre d'instruction Mysqli introuvable Test PHPunit sous Eclipse
- 24. PHPUnit ne revient pas au cas de test suivant
- 25. Définir une durée de temporisation de test avec PHPUnit
- 26. Chemin du squelette de test généré par PHPUnit
- 27. Le code fonctionne mais le test échoue
- 28. Pourquoi ce test échoue-t-il?
- 29. test avec Shoulda macro échoue avec l'erreur
- 30. PHPUnit: Dépendances de test avec le test de la classe parent
Je suppose que ça va faire. Je cherchais quelque chose comme le support des blocs TODO dans le module Perl's Test :: More http://perldoc.perl.org/Test/More.html#Conditional-tests qui exécutera les tests qui devraient échouer, et signaler s'ils ont réussi (de façon inattendue). (PHPUnit semble être seulement capable de sauter complètement.) – mjs
Je pense que la réponse Tom B ci-dessous sur la méthode markTestIncomplete est mieux –
qui ne fait pas l'affaire. Une solution devrait être de marquer le test comme TDD, donc il affiche 'I' si le test échoue (pas encore implémenté), et surtout, il devrait échouer si le test passe car cela signifie que nous avons oublié d'enlever la marque TDD. Je ne sais pas comment faire le tour facilement dans phpunit – Alcalyn