Entwicklung & Design

Eine Einführung in Unit Testing mit PHP: Makelloser Code durch effizientes Testen

Seite 3 / 5

Zudem sollte jeder Test unter gleichbleibenden, reproduzierbaren Rahmenbedingungen ablaufen. In PHPUnit gibt es zu diesem Zweck die so genannten Fixtures, die für jeden Test eine feste Testumgebung aufbauen. Die Fixtures werden durch die beiden Funktionen setUp() und tearDown() kontrolliert, die vor beziehungsweise nach jedem einzelnen Test durchlaufen werden. In diesen Funktionen wird das eigentliche Fixture je nach Bedarf initialisiert und wieder gelöscht. Zusätzlich wird jeder einzelne Test innerhalb einer neuen Instanz der Test-Runner-Klasse von PHPUnit ausgeführt.

Zu testende Klasse (stark vereinfacht)
class Article() {
	private $title;
	public function __construct($uid) {
		// Objekt wird abhängig von der übergebenen UID instantiiert
	}
	public function getTitle() {
		return $this->title;
	}
}

Listing 3

Die oben skizzierte Klasse repräsentiert einen Artikel, der beispielsweise in einem Onlineshop vorkommen kann. Auf die private Variable $title kann ausschließlich über die öffentliche Funktion getTitle() zugegriffen werden. Die folgende Testsuite ist eine eigene Klasse, die sich von der Klasse TestCase aus PHPUnit ableitet. Dadurch stehen automatisch sämtliche Hilfsfunktionen von PHPUnit zur Verfügung.

Testsuite für die Klasse „Article“
public function setUp() {
	$this->uid = createDummyArticleInDatabase(
		array('title' => 'Test Title')
	);
	$this->fixture = new Article($this->uid);
}
public function tearDown() {
	unset($this->fixture);
	$this->removeDummyArticleFromDatabase($this->uid);
}
public function testGetTitle() {
	$this->assertEquals(
		'Test Title',
		$this->fixture->getTitle()
	);
}

Listing 4

In diesem Beispiel wird in der Funktion setUp() bei jedem Testdurchlauf ein Dummy-Datensatz in die Datenbank geschrieben. Damit sich in der Datenbank keine Datenleichen ansammeln, wird der erzeugte Dummy in der Funktion tearDown() wieder gelöscht.

In der Funktion testGetTitle() wird der eigentliche Test durchgeführt. In der Variable $this->fixture ist jetzt ein sauber instantiiertes Article-Objekt abgelegt, auf das ohne Umwege zugegriffen werden kann. Der große Vorteil der Fixtures wird allerdings erst ersichtlich, wenn die Testsuite eine Vielzahl von Tests beinhaltet. Es ist dann jedes Mal sichergestellt, dass einzelne Testläufe in der Variable $this->fixture auf ein frisch instantiiertes Objekt zugreifen und somit in einer klar definierten Umgebung testen.

Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Ein Kommentar
Webelutions
Webelutions

Sehr guter Artikel!
Ich habe auch einen Artikel über Unit Testing mit PHPUnit geschrieben, dort sind noch weiter Informationen zu diesem Thema vorhanden: http://webelutions.de/blog/unit-testing-mit-php/

Antworten

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!

Hey du! Schön, dass du hier bist. 😊

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team bestehend aus 65 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Danke für deine Unterstützung.

Digitales High Five,
Stephan Dörner (Chefredakteur t3n.de) & das gesamte t3n-Team

Anleitung zur Deaktivierung