test.ical.ly | getting the web by the balls

Jan/10

20

Was wird man von Lime 2 erwarten können?

Ich habe heute irgendwie Probleme mit meinem vServer und schaffe es nicht, mich um meine Hudson Installation zu kümmern. Schade eigentlich, denn ich glaube, da wäre ich gut vorangekommen..

Aber es gibt ja noch andere Themen!

Ich habe ja bereits in einem vorherigen Post erklärt, warum ich mich aktuell für lime und gegen PHPUnit entschieden habe. Kurz gesagt: ich arbeite privat nahezu ausschliesslich mit symfony und kann mit lime dessen Integration in symfony voll ausschöpfen.

lime ist an einigen Stellen zu kurz geraten. Seine xUnit Konformität erschwert das Integrieren in Continuous Integration Tools, es fehlen Testsuiten und es ist rein prozedural um mal einige zu nennen.

Dafür geht es recht schnell von der Hand.

Diese Zusammenfassung muss so oder so ähnlich auch Bernhard Schussek (Web Mozarts) bewogen haben, sich an die Entwicklung von Lime 2 zu machen.

Sein erster Beitrag zum Thema, welcher mir bekannt ist, ist eine Gegenüberstellung von lime und PHPUnit im Juni 2009. Seine Zusammenfassung wie folgt:

PHPUnit…

  • … ist verbose
  • … bietet magische Methoden wie setUp(), in denen die Testdaten (fixtures) vor jedem Test initiiert werden
  • … bietet weitere praktische Tools wie die Unterstützung von Mocks

lime…

  • … ist kurz und bündig und gut lesbar
  • … erfordert Code Wiederholung
  • … erfordert manuelle Initiierung der Testdaten

Quelle: http://webmozarts.com/2009/06/30/easy-unit-testing/

lime kommt im direkten Vergleich also nicht so gut weg.

Bernhard hat sich aber auch gleich an die Entwicklung des sfLimeExtraPlugins gemacht, indem er Annotation Driven Tests implementiert.

(Mehr zu Annotations in PHP kann man hier sehr gut nachlesen: http://www.slideshare.net/stubbles/declarative-development-using-annotations-in-php)

(Das sfLimeExtraPlugin ist mittlerweile in Lime 2 aufgegangen und nicht mehr unter diesem Namen weitergepflegt)

Die Annotationen dienen dazu, den prozeduralen Code mittels Kommentaren zu strukturieren. Mit Hilfe der Extended Reflection API kann dieser Code quasi zur Laufzeit zu etwas grösserem “kompiliert” werden. Anstelle von repitativem Code legt man so das Verhalten mittels Kennzeichnungen fest.

Ein weiteres Feature ist das Testen von Exceptions, welches lime von Hause aus nicht mitbringt. Noch interessanter aber ist die automatische Erstellung von Mock/Stub Objekten, deren Klassen automatisch zur Laufzeit generiert werden. Bisher habe ich noch nicht damit rumgespielt. Auf der einen Seite klingt das unheimlich cool, auf der anderen kann ich es mir nur sehr schwer vorstellen, wie solche Klassen bei komplexeren Architekturen funktionieren sollen. Schliesslich geht es ja nicht darum, dass Methodenaufrufe von Mock Objekten irgendwas zurückliefern, sondern etwas realitätsnahes.


Zwei Monate später im August, Das sfLimeExtraPlugin ist mittlerweile in Lime 2 aufgegangen und nicht mehr unter diesem Namen weitergepflegt, 2009 dann schrieb Bernhard auf der symfony Entwickler Google Group mehr zu seinen Zielen mit Lime 2:
  1. Setup/Teardown Code siehe oben
  2. Unterstützung von Mock Objekt Generierung siehe oben
  3. Unterstützung von Exception Tests siehe oben
  4. Verbesserte Test Ausgabe die Ausgabe von lime hat Schwierigkeiten mit selbst-referenziellen Arrays und kann schonmal in eine Endlosschleife geraten
  5. Verbesserte Vergleichsmethoden das Vergleichen von Objekten, Arrays, Doubles und anderen Typen ist in lime z.T. nicht gut auf die jeweiligen Typen abgestimmt
  6. Verbessertes Fehler Management PHP Warnings und Notices gingen in lime oftmals unter
  7. Integration in CI Tools Lime 2 soll u.a. in Sismo und phpUnderControl integriert werden

Quelle: http://groups.google.com/group/symfony-devs/msg/2ddc8e013ebcf0bf

Das klingt doch alles sehr spannend. Vorf allem der letzte Punkt lässt auf xUnit Konformität hoffen, welche es ermöglichen würde Lime 2 in nahezu alle CI Tools zu integrieren.

Im selben Monat auf dem symfony Day 09 führt Bernhard seine Ideen noch weiter aus und zeigt einige Beispiele. Die Folien sind sehr lesenswert und zeigen, dass er tatsächlich mit der Materie vertaut ist.

Siehe: http://www.slideshare.net/bschussek/best-practice-testing-with-lime-2

Seit November ist dann die erste Alpha Version verfügbar.

Siehe: http://www.symfony-project.org/blog/2009/11/10/lime-2-alpha-released.

Das war jedoch bisher so ziemlich das letzte, was man hörte.. Gut, es ist noch nicht lange her und bisher kann man sich nicht über Bewegung beklagen.

Klar ist, dass Lime 2 als Test Framework in Symfony 2 angekündigt ist. Ebenso klar ist, dass es als Plugin oder ähnlich ebenso in symfony 1.x nutzbar sein wird.

Jedoch ist mir unklar, wie es weitergeht. Wie ist die Roadmap, wie ist der Stand der Entwicklung, wie der Stand der Dokumentation? Gibt es bereits Feedback von den Alpha Testern? Gibt es vielleicht bald mal eine eigene Website für Lime 2? Geht es nur mir so, oder fiebert noch jemand dem Erscheinen entgegen und will unbedingt mehr erfahren?

Die gute Nachricht ist, dass Bernhard jedenfalls nicht untätig ist. Der letzte SVN Commit ist noch garnicht so lange her. ;)

Siehe: http://trac.symfony-project.org/log/tools/lime/

Ich bin jedenfalls weiterhin gespannt!

· · · · · ·



  • http://webmozarts.com Bernhard

    Hi Christian,

    Vielen Dank für deine Zusammenfassung!

    Vorweg möchte ich dich kurz korrigieren: In Lime 2 wird nicht PHPs Reflection API verwendet, da diese nicht das ermöglicht, was ich erreichen wollte: Eine einfache Code-Strukturierung, ohne dabei unnötige Klassen oder Funktionen programmieren zu müssen. Stattdessen wird der PHP Tokenizer verwendet, um die Skripte nach diesen “fake annotations” zu analysieren und in entsprechender Reihenfolge auszuführen. Klingt kompliziert, ist aber unglaublich performant.

    Mock und Stubs funktionieren bei guten Architekturen übrigens unabhängig von deren Komplexität. Eine gute Architektur zeichnet sich durch gute Entkoppelung und definierte Schnittstellen aus, und genau dort setzt du mit Mocks/Stubs an. Das schöne ist, dass eine testgetrieben mit Mocks und Stubs entwickelte Architektur von selbst sehr flexibel und wiederverwendbar ist.

    Die Lime Alpha 2 wäre eigentlich schon im Dezember geplant gewesen, aber leider hatte ich zuwenig Zeit, um die entsprechenden Funktionalitäten zu implementieren. Sobald dieses Unisemester Ende Jänner vorbei ist, werde ich mich aber wieder an die Weiterentwicklung und Dokumentation setzen.

    Bernhard

  • http://test.ical.ly Christian

    Hi Bernhard,

    Erstmal herzlich willkommen! ;)

    Danke fuer die Korrektur.

    Was die Mock Objekte angeht bin ich noch nicht ganz ueberzeugt. Auch wenn ich dir, was saubere Architekturen angeht, Recht gebe, ist das doch nicht immer die Wirklichkeit in der wir uns befinden. Oftmals sind die Dinge eben heftigst verkoppelt und schwer zu mocken. Dafuer gibt es natuerlich auch Techniken, aber kaum automatisierbare..

  • http://test.ical.ly Christian

    @Bernhard nochmal
    Gibt es eine längerfristige Roadmap mit Milestones?
    Wäre interessant mal zu sehen, was wann zu erwarten sein wird. Ich könnte mir auch gut vorstellen, dass durch mehr transparenz vielleicht der ein oder andere motiviert wird, etwas beizusteuern.

<<

>>

Theme Design by devolux.nh2.me