Kann ein Test mit PHPUnit als "erwartet ausfallen" markiert werden? Dies ist nützlich, wenn TDD ausgeführt wird, und Sie möchten zwischen wirklich fehlgeschlagenen Tests und fehlgeschlagenen Tests unterscheiden, da der zugehörige Code noch nicht geschrieben wurde.Wie wird angezeigt, dass ein PHPUnit-Test fehlschlägt?
Antwort
Ich denke in diesen Fällen ist es ziemlich Standard, den Test einfach als übersprungen markieren. Ihre Tests werden weiterhin ausgeführt und die Suite wird bestehen, aber der Test-Runner wird Sie über die übersprungenen Tests informieren.
http://phpunit.de/manual/current/en/incomplete-and-skipped-tests.html
Wenn Sie einen Test haben scheitern aber wissen, dass ihr Versagen zu erwarten war, kann man add a message to the assertion, dass folgende Ausgabe in den Ergebnissen:
public function testExpectedToFail()
{
$this->assertTrue(FALSE, 'I knew this would happen!');
}
In den Ergebnissen:
There was 1 failure:
1) testExpectedToFail(ClassTest)
I knew this would happen!
Dies würde dazu führen, dass die Suite fehlschlägt, was nicht das gewünschte Ergebnis zu sein scheint. –
Die Frage erwähnt TDD, in der Sie fehlgeschlagene Tests gegen Code schreiben, der nicht existiert. –
$ this-> fail ('Ich wusste, dass das passieren würde!'); ist eine Abkürzung dafür :). –
Ich denke wirklich, es ist eine schlechte Praxis, aber Sie können PHPUnit auf diese Weise Trick:
/**
* This test will succeed !!!
* @expectedException PHPUnit_Framework_ExpectationFailedException
*/
public function testSucceed()
{
$this->assertTrue(false);
}
saubere:
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');
}
Der Code oben funktioniert, aber ich musste fangen 'PHPUnit_Framework_AssertionFailedError', nicht' PHPUnit_Framework_ExpectationFailedException' –
es ist gute Praxis, wenn Sie tatsächlich testen eine Behauptung es selbst ist, zB testAssertEqual_fail: D so können Sie überprüfen, Ihre benutzerdefinierten Behauptungen wie erwartet fehlschlagen, aber für general Verwenden Sie, Sie tun etwas falsch – aqm
Die 'richtige' Methode des Umgangs mit dieser ist $this->markTestIncomplete()
zu verwenden. Dies markiert den Test als unvollständig. Es wird zurückkommen wie übergeben, aber es wird die Nachricht angezeigt. Weitere Informationen finden Sie unter http://www.phpunit.de/manual/3.0/en/incomplete-and-skipped-tests.html.
Die Frage ist über TDD, wo Sie schreiben (idealerweise abgeschlossen) Tests vor dem Hauptcode. "MarkTestIncomplete" ist jedoch für einen "nicht implementierten Test" gedacht (http://phpunit.de/manual/3.7/de/incomplete-and- skipped-tests.html beginnt mit der Beschreibung einer leeren Testmethode für einen nicht implementierten Test , erklärt dann, wie das zu einem falschen Erfolg führt). –
Der Kommentar von neunundsechzig oben ist fast perfekt für das, was ich suchte.
Die fail() -Methode ist nützlich, wenn Sie einen Test für eine erwartete Ausnahme festlegen und die Ausnahme nicht auslösen, die der Test fehlschlagen soll.
Natürlich wird die triggerException durch etwas in Ihrem Objekt ersetzt.
- 1. Wenn die Validierung der Eingabe fehlschlägt, wird ein Dialogfeld angezeigt.
- 2. Wie wird angezeigt, dass beim Klicken auf die Schaltfläche eines anderen Dialogfelds ein Dialogfeld angezeigt wird?
- 3. Verhindern, dass "Notationspalette" angezeigt wird
- 4. Verhindern, dass ein PostBack in der Historie angezeigt wird
- 5. was bewirkt, dass imagecreatetruecolor() fehlschlägt?
- 6. Warum führt ein Nulldatum dazu, dass die Kreuztabellenfunktion fehlschlägt?
- 7. Verhindern, dass Hintergrundprozess im Dock angezeigt wird
- 8. Immediate = "true" bewirkt, dass update = "component" fehlschlägt
- 9. Verhindern, dass das Site-Verzeichnis angezeigt wird
- 10. Warum verursacht Postsharp, dass ein Webprojekt beim Veröffentlichen fehlschlägt?
- 11. Leere $ _controllerDirectory Array (von Zend_Controller_Dispatcher_Standard) während phpunittest
- 12. Warum verursacht die SetNetworkID von RakNet, dass ein Assert fehlschlägt?
- 13. Wie wird ein leeres div-Element angezeigt?
- 14. pgAdmin III: Wie wird ein Blob angezeigt?
- 15. Wie wird ein Zeilenumbruch mit outputText angezeigt?
- 16. Wie wird ein Python-Skript ausgeführt, ohne dass die Windows-Konsole angezeigt wird?
- 17. verhindern, dass die Seite angezeigt wird
- 18. Was würde dazu führen, dass die Outlook-Automatisierung plötzlich fehlschlägt und wie sie wieder hochgefahren wird?
- 19. Wie stelle ich ein Bild so ein, dass es über eine Dropdown-Menüoption angezeigt wird?
- 20. Wie verhindere ich, dass Button Surround in Java angezeigt wird?
- 21. Verhindert, dass die Standardtastatur angezeigt wird, wenn UITextField gedrückt wird
- 22. Wie wird ein MKMapView ohne Straßennamen angezeigt?
- 23. Wie wird ein Teil eines Bildes angezeigt?
- 24. Wie wird ein Bild mit Compojure angezeigt?
- 25. Wie wird ein neues Listenelement angezeigt?
- 26. Wie wird ein Ort mit Geocoder angezeigt?
- 27. Wie wird ein TIFF angezeigt? mit pascal
- 28. Wie wird ein Bild mit URL angezeigt?
- 29. Wie kann man verhindern, dass eine Seite allmählich angezeigt wird?
- 30. Wie wird das Besitzerfenster minimiert, wenn ein Modal angezeigt wird?
Ich denke, dass das tun wird. Ich suchte nach etwas wie der Unterstützung für TODO-Blöcke in Perl's Test :: More Modul http://perldoc.perl.org/Test/More.html#Conditional-tests, die die Tests, die voraussichtlich fehlschlagen werden, ausführen und melden wenn sie (unerwartet) erfolgreich waren. (PHPUnit scheint nur in der Lage zu sein, vollständig zu überspringen.) – mjs
Ich denke, dass Tom B unten antworten über markTestIncomplete-Methode ist besser –
Das tut nicht den Trick. Eine Lösung sollte sein, den Test als TDD zu markieren, so dass "I" angezeigt wird, wenn der Test fehlschlägt (noch nicht implementiert), und am wichtigsten ist, dass er fehlschlägt, wenn der Test bestanden hat, weil wir vergessen haben, die TDD-Markierung zu entfernen. Ich weiß nicht, wie man den Trick in phpunit leicht tut – Alcalyn