Facebook
Twitter
Google+
Kommentare
3

Zwei Dinge, die mir bei PHPUnit fehlen

Ich arbeite schon eine Weile mit Unit Testing und das eigentlich immer auf Basis von PHPUnit. Und bevor ich jetzt meine zwei Dinge loswerde, die mehr fehlen möchte ich erst mal erklären, dass ich PHPUnit als das Mittel der Wahl bezeichnen würde, wenn es um Unit Testing im Bereich PHP geht. Meiner Meinung kann kein anderes Tool diesem das Wasser reichen. Da hat Sebastian Bergmann sicherlich gute arbeit geleistet. Klingt zu schleimig? Egal, kommt von Herzen.

Zwei Dinge vermisse ich jedoch bei Sebastian Bergmanns Tool. Vielleicht habe ich sie auch einfach nicht gefunden. Wenn dem so ist, dann berichtigt mich einfach. Mein erster Feature Vorschlag wäre ein Logger Interface. Ich benötige derzeit ein ganz abgefahrenes Format, dass PHPUnit natürlich nicht out-of-the-box liefern kann, da es proprietär ist. Jetzt würde ich gerne die Möglichkeit haben, mir ein bestimmtes Interface zu schnappen, dagegen meinen Logger zu programmieren, um danach phpunit über die Kommandozeile  zu sagen, dass es doch bitte diesen verwenden soll, wenn ich meine Tests laufen lasse. Das es dieses Interface gibt, da bin ich mir fast schon sicher (war aber grad nicht in der Lage nachzuschauen), wie man es vielleicht nutzen könnte, weiß ich leider nicht.

Der zweite Punkt behandelt Selenium. Wir nutzen PHPUnit, um unsere Selenium Tests automatisiert über eine Continuous Integration Lösung kontinuierlich laufen zu lassen. Klappt wunderbar. In PHPUnit wurde für diesen Fall eine neue Ebene eingeführt, die einen Test Case erweitert, so dass die Funktionalität mit der Seleniums erweitert wird. Die Aufrufe an Selenium werden eins zu eins über die magische __get Methode an den RC Server weitergereicht. Die Möglichkeit so den kompletten Umfang von Selenium zu nutzen ist auf jeden Fall eine Bereicherung für dieses Unit Testing Tool. Was ich mir aber wünschen würde, wäre, dass ich nicht über __get kommunizieren, sondern über eine Selenium Klasse, die alle Funktionalität beinhaltet (separation of concerns). An diese würde ich in diesem Falle nur alles weiterdelegieren. Vorteil hiervon wäre, dass ich die Selenium Klasse auch in anderen Projekten einsetzen könnte und zusätzlich noch, dass ich diese Klasse ohne Probleme austauschen könnte, falls ich mal einen anderen „Pseudo-Browser“ verwenden will.

Oft ist es nämlich der Fall, dass man einen Test Case aus Selenium bekommt, der keine Browserabhängigkeit besitzt. Keine JavaScript Abhängigkeit und nur einfache asserts könnte ich mir zum Beispiel vorstellen. In einem solchen Fall könnte man einen einfachen fopen-Browser basteln, den ich PHPUnit unterjuble, mit der Funktionalität von Selenium, aber einem unheimlichen Geschwindigkeitsvorteil. Das geht natürlich nicht in allen Fällen, aber in vielen bestimmt. Vorteil hier wäre auch noch, dass ich meine Testfälle weiterhin mit Selenium aufzeichnen könnte.

Vielleicht machen meine Ansätze ja nur in meinem Kopf Sinn. Das ich auch der Grund, warum ich relativ neutral versucht habe zu schreiben. Wenn der Seleniumsklassen-Ansatz Sinn macht, dann würde ich mich sogar bereiterklären, diesen umzusetzen, denn diese Klasse kann ich momentan auch woanders gebrauchen. Also wie immer gilt: Feedback erwünscht.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

3 Comments

  1. Ad 1: PHPUnit_Framework_TestListener (siehe http://www.phpunit.de/browser/phpunit/trunk/PHPUnit/Framework/TestListener.php ) ist das Logger-Interface, das Du vermisst. Es ist die Basis allen Loggings in PHPUnit. Falls Dir etwas in diesem Interface fehlt, bitte melden.

    Ad 2: PHPUnit_Extensions_SeleniumTestCase_Driver (siehe http://www.phpunit.de/browser/phpunit/trunk/PHPUnit/Extensions/SeleniumTestCase/Driver.php ) ist die Selenium-Klasse, die Du suchst. Falls Dir etwas in dieser Klasse fehlt, bitte melden.

    Reply
  2. @Sebastian: Dann hat sich der Artikel ja gelohnt 🙂 Glaube ich zumindest. Dein Trac ist grad down.
    Ab welcher Version gibt es denn die die Driver Klasse (bei mir existiert sie leider noch nicht)?

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen