In PHPUnit können Sie einen Test so einrichten, dass er von anderen Tests abhängt, indem Sie @depends
annotation verwenden.
Ist es möglich, das gesamte TestCase von Test in anderen Testfällen abhängig zu machen? Oder machen Sie zumindest einen einzelnen Test in einem Testfall abhängig von einem Test in einem anderen Testfall?
Ich habe es versucht:
%Vor%Aber wie ich erwartet habe, funktioniert es nicht.
Aktualisierung:
Die genaue Situation sieht folgendermaßen aus: Es gibt class B
, das class A
verwendet. Daher möchte ich B
nur testen, wenn die Tests für A
(oder einen der Tests) ohne Fehler ausgeführt werden. Wie kann ich das tun?
Ausnutzen von Abhängigkeiten ist extrem wichtig! Die lose Kopplung, auf die Bezug genommen wird, ist für die tatsächliche Anwendungsarchitektur und nicht für Komponententestfälle. Wenn logische Abhängigkeiten in die funktionale Ausführung eingebaut sind, ist es immer eine gute Idee, diese Abhängigkeiten zu nutzen.
Die Testverdopplung eignet sich für SOA, bei der Abhängigkeiten nicht einem bestimmten zugeordnet werden können Fehler in einer Blackbox UND der Dienst ist nicht zuverlässig. Dies ist nicht geeignet für Inter-Application-Klassen.
Sie möchten diese Art von Funktionalität definitiv verwenden wenn Es gibt logische Abhängigkeiten zwischen Testklassen. Das zu erfassende Konzept aus Komponententests ist die Fähigkeit, Defekte sofort auf bestimmte Komponenten zu isolieren.
Diese Funktionalität ist in PHPUnit v 3.7.13 verfügbar. Dies funktioniert jedoch nur, wenn Sie PHPUnit in einem Verzeichnis ausführen, das beide TestCase-Klassen enthält.
Zum Beispiel mit dieser Ordnerstruktur
-Anwendung \ dep -BTest.php -CTest.php
Die Klassen ...
%Vor%
und ...
%Vor%Das ist das Ergebnis
%Vor%Sie könnten beide Testfall-Klassen in derselben Datei haben, aber das wäre eine schlechte Struktur. Es ist nicht notwendig, sicherzustellen, dass ein Test vor dem anderen läuft.
Als agiler Coach sehe ich die Testverdopplung viel zu oft in großen Organisationen, wo spezialisierte Segmente Buildfehler vermeiden wollen, wenn andere Komponenten Änderungen vornehmen, die zu einem Testausfall führen. Dies verhindert natürlich den gesamten Zweck der Komponententests, Komponentenfehler zu identifizieren, bevor der Endbenutzer dies tut.
Es gibt keine eingebaute Möglichkeit, dies zu tun, aber es wäre nicht schwer, eine Anzahl von Tests von anderen Testdurchläufen abhängig zu machen. Sie müssen sicherstellen, dass ATest
vor BTest
ausgeführt wird.
Es ist auch möglich, Tests von einem ganzen Testfall abhängig zu machen.
%Vor%Sie können diese verbessern, indem Sie die Namen der fehlgeschlagenen Tests nachverfolgen, sodass Sie sich für jeden Fall auf eine Teilmenge von Tests verlassen können.
Es scheint, dass Ihre Tests stattdessen integrativ sind und fehlschlagen, wenn bestimmte Subsets unterbrochen werden. Ich würde Sie ermutigen, Mocks und Stubs aufzuschauen. Nur diese sind die richtigen Antworten auf Ihre Frage. Fallen Sie nicht auf hackische Workarounds herein, die Sie nur auf lange Sicht verletzen.
Tags und Links unit-testing php phpunit