PHPUnit – Testen mit nativen PHP-Funktionen

Gelegentlich verwenden die zu testenden Methoden native PHP-Funktionen wie file_get_contents(), die unerwünschte Nebeneffekte erzeugen. Wie wir darum herum kommen, könnt ihr im folgenden lesen. 


Schlecht testbarer Code

Zunächst ein Beispiel des Problems.

Hier wird die native PHP-Funktion file_get_contents() verwendet. Insbesondere wenn Daten von einem externen Server geladen werden, muss im Testsystem dieser Aufruf unterbunden werden.

Ein Test wie der folgende wäre also gefährlich.


Lösung: Native PHP-Funktionen kapseln

Die Lösung ist denkbar einfach. Wir erstellen eine Fassade für derartige Funktionen.

Diese kleine Helferklasse landet wie so vieles andere auch im Dependency Injektor und wird bei Bedarf statt der ursprünglichen Methode verwendet.

Der Programmcode nach dem Umbau

Unsere Klasse sieht dann also so aus:

Der Test nach dem Umbau

Der Test kann jetzt einfach im Dependency Injektor ein Mock-Objekt von FileOperator ablegen und damit verhindern, dass tatsächlich eine URL abgefragt wird.


Mehr zum Thema PHPUnit und Testing