Mit PHPUnit Datenbank-Operationen Testen
Monday, March 31st, 2008Da dieses Feature kaum beworben wurde, es aber eine wirklich sinnvolle Erweiterung zu den gängigen Unittests ist, möchte ich in meiner lockeren PHPUnit-Reihe auf einen Port von DBUnit für PHPUnit aufmerksam machen.
DBUnit ist ursprünglich eine Erweiterung von JUnit, um Unittests auf die Resultate von Datenbankoperationen anzuwenden. DBUnit für PHP ist seit der Version 3.2 in PHPUnit enthalten.
Kurz zusammengefasst legt man eine Ausgangsdatei (in XML) für die Datenbank an, und eine XML-Datei, in der die Zustände der DB nach dem Ablauf des Unittests stehen. Das XML-Format ist dabei äußerst simpel und lässt sich leicht erstellen. Die beiden Zustände (vor und nach dem Unittest) lassen sich dann mit $this->assertDataSetsEqual(); vergleichen und als Test auswerten. Die Testklasse muss lediglich PHPUnit_Extensions_Database_TestCase statt PHPUnit_Framework_TestCase extenden.
Eine genauere Beschreibung, wie man einen Test aufbaut, findet sich im Blog des Autors.
Insgesamt eine sehr schöne Sache, mit der kleinen Einschränkung, dass DBUnit immer PDO-Objekte erwartet, was beispielsweise eine Verwendung mit dem Zend Framework (Zend_DB) unmöglich macht.