Heute bin ich über die Anleitung zur Integration von PHPUnit in Netbeans gestolpert.

Wie so oft war diese nicht ganz ausreichend, bzw. nicht weitreichend genug.

Hier aber dann doch eine Komplettanleitung mit Erfolgsgarantie auf Windows Rechnern (Stand Netbeans 6.8 bzw. Netbeans 6.9M1)

1. Schritt: PHP Installieren

Die Meisten, die dieses Thema hier bewegt, haben PHP bestimt schon installiert. Entweder manuell, oder z.B. über das beliebte XAMPP Paket, deswegen gehe ich auf diesen Punkt nicht weiter ein, weil er eigentlich schon erledigt sein sollte.

2. Schritt: PHPUnit installieren

Dies geht am Einfachsten über PEAR.
Dazu wird die Eingabeaufforderung gestertet (START->Alle Programme->Zubehör->Eingabeauforderung)
Auf Vista-Rechnern empfielt es sich die Eingabeaufforderung mit Administratorrechten zu starten. Dazu wird mit der rechten Maustaste geklickt und “Als Administrator ausführen” ausgewählt.

Nun wechselt man in den PHP Ordner von XAMPP. Dieser befindet sich z.B. unter c:\xampp\php

Dort wird dann eingegeben:

pear channel-discover pear.phpunit.de [Enter]
pear channel-discover pear.symfony-project.com [Enter]
pear install phpunit/PHPUnit[Enter]

3.Schritt: XDebug aktivieren

In der Datei c:\xampp\php\php.ini müssen folgende Zeilen aktiviert werden (d.h. das ; Zeichen muss entfernt werden)

zend_extension_ts="C:\xampp\php\ext\php_xdebug.dll"
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000

4.Schritt: Integration in Netbeans

Man wechselt in das Menü Tools->Options->PHP

Im Tab “General” trägt man unter “PHP-Interpreter” den Pfad zur php.exe Datei ein z.B. C:\xampp\php\php.exe

Im Tab “Unit Testing” trägt man unter “PHPUnit Script” den Pfad zum in Punkt 2 installierten PHPUnit ein z.B. C:\xampp\php\phpunit.bat

5.Schritt: Das Projekt aufsetzen

Hier empfielt es sich ein neues Projekt zu starten und eine neue Klasse wie anzulegen.
Ein Beispiel wäre:

  • ein neues Projekt mit dem Namen “Mathe”
  • und in diesem Projekt eine neue Klasse “Taschenrechner.php”

Die Klasse Distanz.php enthält dann folgenden Code:

<?php
class Taschenrechner{
/**
* @assert (0, 0) == 0
* @assert (0, 1) == 1
* @assert (1, 0) == 1
* @assert (1, 1) == 2
* @assert (1, 2) == 4
*/
public function add($a, $b){
return $a + $b;
}
 
public function add2($a, $b){
return $a + $b;
}

Um nun automatisch eine Testdatei zu erstellen, klickt man mit der rechten Maustaste auf die Klassen-Datei Taschenrechner.php und wählt aus dem Kontextmenü “Tools->Create PHPUnit tests”

Darauf hin öffnet sich ein weiteres Menü, indem man den Ordner für die Testdateien angeben soll. Da dieser noch nicht vorhanden ist, erstellt man selbst einen (am besten als Unterordner “tests” im Projekt-Rootverzeichnis) und wählt diesen aus.

Netbeans erstellt daraufhin automatisch eine Datei TaschenrechnerTest.php im “tests” Ordner.

6.Schritt: PHPUnit endlich testen

Wählt man nun bei ausgewählter Datei “Taschenrechner.php” (Diese muss im Code-Fenster angezeigt werden” auf “Run->Test File” oder STRG+F6 so werden die Tests ausgeführt und im Fenster “Test Results” angezeigt.

Ist das Fenster “Test Results” nicht sichtbar, kann man es über “Window->Other->Test Results” einblenden

7.Schritt: Mehr Komfort über Code-Coverage

Weitaus komfortabler als das einzelne ausführen einzelner Tests ist die sogenannte “Code-Coverage”.

Diese wird eingeblendet, wenn man mit der rechten Maustaste auf das Projekt klickt und im Kontextmenü “Code-Coverage->Collect and display Code-Coverage” auswählt.
Danach erscheint im unteren Bereich eine Statusleite und einige Buttons zum erweiterten Testen.

Die Statusleite zeigt an, wieviel Prozent des Codes durch Tests abgedeckt sind, und hebt durch grüne (Durch Test abgedeckt) und rote (Nicht durch Test abgedeckt) Hinterlegung im Code die Methoden hervor, die durch Tests behandelt werden bzw. nicht.

Über den Button “All Tests” kann man dann alle vorhandenen Tests in einem Projekt auf einmal ausführen und alle Stati ansehen. (Wäre ja schlimm, wenn man ein einem Großprojekt jede Datei einzeln checken müsste)

Ich hoffe dieser Artikel hat geholfen, vor allem der Tipp mit dem Aktivieren von XDebug über die php.ini sollte hilfreich sein, weil sonst die Code-Coverage und das automatische Ausführen aller Tests nicht funktionieren würde und es zu folgenden, nichtssagenden und nicht zu behebenden Fehlern kommen würde:

- No tests executet (0,0 s)
-
Perhaps an error occured, verify in Output window.