Automatische Generierung von Testfallklassen

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.6: Die Klasse Sample

<?php
class Sample {
  public function doSomething() {
  }
}
?>


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.