Ich versuche, Unit-Tests für die offensichtlichen Positive, die es eingeführt wird, und ich versuche, einen Unit-Test für eine Klasse zu schreiben, schrieb ich neulich. (Ich weiß, das ist das Gegenteil von TDD, bitte tragen Sie mit mir)PHPUnit-Test Frage - Wie Unit-Test meine Klasse
Meine Klasse, Image
, wird in Verbindung mit einigen anderen für die Bildbearbeitung verwendet.
Image
im Wesentlichen Wraps eine GD-Bild-Ressource und speichert Daten mit ihm. wenn die Größe verändert wird zum Beispiel eine Instanz von Image
immer enthält sein gegenwärtiger Zustand, das heißt seine neue Breite/Höhe, die ursprünglichen Bilddaten usw.
Die Image
Klasse enthält auch Methoden für,
- selbst erstellen aus einer Datei, String-Daten oder URL, z
$image->loadFromPath()
- Erstellen einer neuen GD-Bildressource aus den Eigenschaften der aktuellen Instanz
Image
, z. für die Bildgrößenänderung Hintergrund Transparenz usw. - Klonen der GD Bildressource für den Einsatz in den Klassen zur Manipulation
Was mit ich bin zu kämpfen ist, wie Unit-Test diese Klasse richtig mit PHPUnit zu halten. Ich habe etwas gelesen und ich habe ein paar widersprüchliche Ideen, wie ich es angehen kann und ich weiß nicht, was richtig ist. Ich,
- einen Test für jede Methode der Klasse schreiben. Ich habe irgendwo gelesen, dass ich jede Methode testen sollte. Einige der Methoden führen jedoch andere (zu Recht, kann ich hinzufügen), so dass Sie dann eine Kette von Abhängigkeit haben. Aber ich lese auch, dass jeder Unit-Test unabhängig von dem anderen sein sollte. Was mache ich, wenn das der Fall ist?
- Schreiben Sie jeden Test als eine Nutzungsroute der Klasse. Ich habe auch irgendwo gelesen, dass jeder Test stattdessen 1 Pfad/Nutzungsroute darstellen sollte, die Sie mit der Klasse belegen können. Wenn Sie also jede Verwendung abdecken, erhalten Sie letztendlich eine vollständige Codeabdeckung.
Also, welche von diesen ist richtig, wenn überhaupt?
Kennen Sie die Codeabdeckung? IMO ist es wichtiger, jede Codezeile mindestens einmal auszuführen, anstatt einen Test für jede einzelne Methode zu erstellen, was nicht immer aus dem von Ihnen genannten Grund notwendig ist. – Franz
+1 für den Einstieg in UnitTests – Gordon
Ich weiß, welche Codeabdeckung ja ist, und dass Sie auf 100% zielen sollten, was bedeutet, dass jede Zeile mindestens einmal ausgeführt werden sollte. Es ist also definitiv besser, den Testfall zu schreiben, in dem jeder Test eine Aktion ist, die Ihre Klasse durchführt, und nicht jeder Test für eine bestimmte Methode? –