Das PHPUnit-Befehlszeilentesttool wird über den Befehl phpunit aufgerufen. Der folgende Code zeigt, wie Tests über das PHPUnit-Befehlszeilentesttool ausgeführt werden.
phpunitArrayTest
PHPUnit 2.3.0 von Sebastian Bergmann
Zeit: 0,067288
OK (2 Tests)
Für jeden Test gibt das PHPUnit-Befehlszeilentesttool ein Zeichen aus, das den Prozess angibt:
· Ein erfolgreicher Test gibt „.“ aus.
·Beim Ausführen der Testmethode tritt ein Assertionsfehler auf und „F“ wird gedruckt.
·Beim Ausführen der Testmethode tritt ein Fehler auf und „E“ wird gedruckt.
·Der Test ist nicht abgeschlossen oder der Test gibt nicht „I“ aus (siehe Kapitel „Unvollendete Tests“ am Ende dieses Buches).
PHPUnit kann zwischen Ausfällen und Fehlern unterscheiden. Ein Fehler ist eine Verletzung der PHPUnit-Assertion und ein Fehler ist eine unerwartete Ausnahme oder ein PHP-Fehler. Manchmal ist diese Unterscheidung nützlich, weil Fehler leichter zu beheben sind als Misserfolge. Wenn Sie eine lange Liste von Problemen haben, ist es eine gute Idee, zuerst alle Fehler zu beheben und dann zu prüfen, ob weiterhin Fehler bestehen.
Schauen wir uns unten einige der Optionen des Code-Befehlszeilen-Testtools an:
phpunit --help
PHPUnit 2.3.0 von Sebastian Bergmann
Verwendung: phpunit [switches] UnitTest [UnitTest.php]
--coverage-data <Datei> Code-Coverage-Daten im Rohformat in eine Datei schreiben.
--coverage-html <Datei> Code-Coverage-Daten im HTML-Format in eine Datei schreiben.
--coverage-text <Datei> Code-Coverage-Daten im Textformat in eine Datei schreiben.
--testdox-html <Datei> Agile-Dokumentation im HTML-Format in eine Datei schreiben.
--testdox-text <Datei> Agile-Dokumentation im Textformat in eine Datei schreiben.
--log-xml <Datei> Testfortschritt im XML-Format in einer Datei protokollieren.
--loader <loader> Zu verwendende TestSuiteLoader-Implementierung.
--skeleton Erzeugt eine UnitTest-Skelettklasse für Unit in Unit.php.
--wait Wartet nach jedem Test auf einen Tastendruck.
--help Druckt diese Nutzungsinformationen.
--version Gibt die Version aus und beendet.
phpunit UnitTest
führt die von der Klasse UnitTest bereitgestellten Tests aus, die in der Quelldatei UnitTest.php definiert sein sollten.
Die Klasse UnitTest muss die Klasse PHPUnit2_Framework_TestCase erben oder eine öffentliche statische Methodensuite bereitstellen und die Klasse des PHPUnit2_Framework_Test-Objekts zurückgeben (z. B. eine Instanz der Klasse PHPUnit2_Framework_TestSuite).
phpunit UnitTest UnitTest.php
führt den von der Klasse UnitTest bereitgestellten Test aus wird im Befehl in der angegebenen Quelldatei (UnitTest.php) definiert.
--coverage-data, --coverage-html und --coverage-text
steuern die Analyse und Sammlung von Code-Coverage-Informationen zum Ausführen von Tests (siehe Abschnitt Code-Coverage-Analyse am Ende dieses Buches).
--testdox-html und --testdox-text
generiert eine agile Dokumentation zum Ausführen von Tests im HTML- oder Nur-Text-Format (siehe Kapitel „Andere Verwendungsmöglichkeiten des Testens“ am Ende dieses Buches).
--log-xml
generiert Protokolldateien im XML-Format zum Ausführen von Tests.
Das nächste Beispiel zeigt die XML-Protokolldatei, die für die Tests in ArrayTest generiert wurde.
<?xml version="1.0"kodierung="UTF-8"?>
<testsuites>
<testsuite name="ArrayTest" Tests="2" Failures="0" Errors="0" Time="0.020026">
<testcase name="testNewArrayIsEmpty" class="ArrayTest" time="0.014449"/>
<testcase name="testArrayContainsAnElement" class="ArrayTest" time="0.005577"/>
</testsuite>
</testsuites>
Die folgende XML-Protokolldatei wird für zwei Tests der Testklasse namens FailureErrorTest generiert, einer ist testFailure und der andere ist testError. Dies zeigt, wie Ausfälle und Fehler getrennt dargestellt werden.
<?xml version="1.0"kodierung="UTF-8"?>
<testsuites>
<testsuite name="FailureErrorTest" testen="2" Fehler="1" Fehler="1" Zeit="0.013603">
<testcase name="testFailure" class="FailureErrorTest" time="0.011872">
<failure message="" type="PHPUnit2_Framework_AssertionFailedError"></failure>
</Testfall>
<testcase name="testError" class="FailureErrorTest" time="0.001731">
<error message="" type="Exception"></error>
</Testfall>
</testsuite>
</testsuites>
--loader
gibt den zu verwendenden Testsuite-Loader an.
Der standardmäßige Testsuite-Loader sucht nach Quelldateien im aktuellen Arbeitsverzeichnis und in dem durch die PHP-Konfigurationsanweisung include_path definierten Pfad. Gemäß den Benennungsregeln von PEAR lautet die Quelldatei, die einem Klassennamen in der Form Project_Package_Class zugeordnet ist, Project/Package/Class.php.
--skeleton
generiert ein Skelett für eine Testfallklasse namens UnitTest (in der Datei UnitTest.php) für die Klasse Unit (in der Datei Unit.php). Für jede Methode der Originalklasse wird in der generierten Testfallklasse ein unvollendeter Testfall bereitgestellt (siehe Abschnitt „Unvollendete Tests“ am Ende dieses Buches).
Das folgende Beispiel zeigt, wie eine Skeletttestklasse für eine Klasse namens Sample generiert wird.
phpunit --skeleton Beispiel
PHPUnit 2.3.0 von Sebastian Bergmann.
Habe ein Testklassengerüst für Sample geschrieben
SampleTest.php.
phpunit SampleTest
PHPUnit 2.3.0 von Sebastian Bergmann.
ICH
Zeit: 0,007268
Es gab 1 unvollständigen Testfall:
1) testSampleMethod(SampleTest)
OK, aber unvollständige Testfälle!!!
Testausführung: 1, unvollständige Testfälle: 1.
Wenn Sie Tests für vorhandenen Code schreiben, müssen Sie viele der gleichen Codeausschnitte wiederholen, wie zum Beispiel:
public function testSampleMethod( ) {}
PHPUnit kann Ihnen bei der Analyse vorhandener Codes und der Generierung von A helfen Framework für Testfallklassen.
--wait
Am Ende jedes Tests auf einen Tastendruck warten. Dies ist insbesondere dann nützlich, wenn Sie Tests in einem Fenster ausführen, in dem immer nur der Test ausgeführt wird.
Tipp: Wenn im getesteten Code ein PHP-Syntaxfehler auftritt, wird der Textschnittstellentest direkt beendet, ohne dass eine Fehlermeldung ausgegeben wird. Der standardmäßige Testsuite-Loader überprüft die Quelldateien der Testsuite auf PHP-Syntaxfehler, jedoch nicht die in der Testsuite enthaltenen Quelldateien auf Syntaxfehler. Zukünftige Versionen von PHPUnit werden dieses Problem mithilfe von Sandbox-PHP-Interpreterklassen beheben.