PHPUnit bietet einige Leistungsmerkmale, die nicht Bestandteil von JUnit sind. Hierzu gehören unter anderem die automatische Generierung von Testfallklassen aufgrund der zu testenden Klasse, die Unterstützung für unvollständige Test-Implementierungen, die Code-Coverage-Analyse von PHP-Applikationen sowie die Integration von TestDox.
Möchte man für eine bestehende Klasse Testfälle schreiben, so kann PHPUnit ein Grundgerüst für eine Testfallklasse generieren. Auf diese Weise spart man lästige Tipparbeit und kann sich auf das Schreiben der eigentlichen Testfallmethoden konzentrieren.
Für die Klasse Sample
(Beispiel 4.6)
generieren wir beispielsweise mit dem folgenden Aufruf des
PHPUnit-Kommandozeilenwerkzeugs das Grundgerüst für eine
entsprechende Testfallklasse SampleTest
(Beispiel 4.7).
Abbildung 4.3. Automatische Generierung einer Testfallklasse
phpunit --skeleton Sample
PHPUnit 2.2.0 by Sebastian Bergmann.
Wrote test class skeleton for Sample to SampleTest.php.Beispiel 4.7: Die automatisch generierte Klasse SampleTest
<?php
if (!defined("PHPUnit2_MAIN_METHOD")) {
define("PHPUnit2_MAIN_METHOD", "SampleTest::main");
}
require_once "PHPUnit2/Framework/IncompleteTestError.php";
require_once "PHPUnit2/Framework/TestCase.php";
require_once "Sample.php";
/**
* Test class for Sample.
* Generated by PHPUnit2_Util_Skeleton
* on 1978-04-22 at 02:19:00.
*/
class SampleTest extends PHPUnit2_Framework_TestCase {
public static function main() {
require_once "PHPUnit2/Framework/TestSuite.php";
require_once "PHPUnit2/TextUI/TestRunner.php";
$suite = new PHPUnit2_Framework_TestSuite("SampleTest");
$result = PHPUnit2_TextUI_TestRunner::run($suite);
}
/**
* @todo Implement testDoSomething().
*/
public function testDoSomething() {
throw new PHPUnit2_Framework_IncompleteTestError;
}
}
if (PHPUnit2_MAIN_METHOD == "SampleTest::main") {
SampleTest::main();
}
?>php SampleTest.php
PHPUnit 2.2.0 by Sebastian Bergmann.
I
Time: 0.002204
There was 1 incomplete testcase:
1) testDoSomething
OK, but incomplete test cases!!!
Tests run: 1, incomplete test cases: 1.
Die automatisch generierte Testklasse nutzt die Ausnahme
PHPUnit2_Framework_IncompleteTestError (und damit die
Unterstützung für unvollständige Test-Implementierungen von PHPUnit)
in ihren Testfallmethoden und signalisiert so dem Testsystem, dass
der entsprechende Testfall noch nicht implementiert wurde. Würden
die Testfallmethoden stattdessen mit einem leeren Rumpf generiert,
so würde dies den falschen Eindruck vermitteln, dass die Testfälle
fehlerfrei ausgeführt würden.