Testlabor

In den letzten Wochen beschäftige ich mich vor allem mit Ruby und vielen verwandten Themen. Und wer sich mit Ruby (und Rails) beschäftigt, kommt um das Testen seines Codes nicht herum. Da ich seit Jahren ein großer Freund von Test Driven Development (TDD) bin, freue ich mich über die Gelegenheit, tiefer in das Thema einsteigen zu können. Eine Erweiterung zu TDD ist Behaviour Driven Development. Dabei wird nicht mehr länger die Funktionalität eines bestimmten Codeabschnitts getestet, sondern das Verhalten von Code unter bestimmten Bedingungen. Doch dazu später mehr. Heute geht es darum, eine automatisierte Testumgebung, inklusive Growl Notifications aufzusetzen.

Bemerkung: Ich selbst arbeite ausschließlich an Macs, dementsprechend beziehen sich auch alle meine Artikel auf die Arbeit mit OS X (aktuell: Lion), außer sie sind anderweitig gekennzeichnet.

Vorbereitung: Installation von RVM, Ruby und Rails

Ich empfehle sehr stark, zur Verwaltung von Ruby auf dem Mac den Ruby Version Manager (RVM) einzusetzen. Dazu einfach diesen Anweisungen folgen.

Ist RVM einmal installiert und Ruby auf einer aktuellen Version, kann Rails ganz einfach per

sudo gem install rails

installiert werden. Eventuell wird trotz erfolgreicher Installation verlangt, Rails zu installieren. Das passiert vor allem dann, wenn man eine andere Shell als die Bash verwendet (in meinem Fall zsh) und Ruby zwischendurch ein Update erfahren hat. In dem Fall sollte man seine PATH-Variable prüfen.

Schritt 1: rspec

Als Testwerkzeug verwende ich rspec, eine Sprache zum Beschreiben von Spezifikationen. Die Sprache selbst ist Ruby, auch wenn sie auf den ersten Blick anders aussieht. Sie macht sich die Eigenschaft Rubys zu Nutze, anwendungsspezifische Sprachen zu entwickeln (DSL – Domain Specific Language). Zur Anwendung von rspec komme ich in einem späteren Artikel. Hier geht es – wie schon geschrieben – nur um die Installation.

Die Installation von rspec ist denkbar einfach:

gem install rspec

Um rspec anstelle von Unit Testing in einem Rails Projekt unterzubringen, reichen folgende Schritte:

Sollte noch kein Rails Projekt bestehen, wäre jetzt der richtige Zeitpunkt, eines anzulegen.

$ rails new demo-project -T
$ cd demo-project

Der Parameter -T dient dazu, keine Testumgebung zu generieren. Das wollen wir ja hier selbst machen.

Gemfile anpassen:

group :development do
 gem 'rspec-rails'
end
group :test do
 gem 'rspec'
 gem 'webrat'
end

Anschließend das Bundle noch einmal laden:

bundle install

Und rspec für die Anwendung installieren:

rails generate rspec:install

Das Rails Projekt sollte jetzt einen Ordner spec haben, in welchem sich die Tests befinden.

Schritt 1.5: Testumgebung testen

Das folgende Beispiel ist schamlos aus dem Buch “Ruby on Rails Tutorial – Learn Rails by Example” von Michael Hartl     geklaut.

Zum Testen der Umgebung, generieren wir einen Controller:

rails generate controller Pages home contact

Es werden nun ein Controller, verschiedene Views und einige Testdateien angelegt. Da wir aber nicht alle angelegten Tests brauchen, sondern uns in erster Linie der Controller interessiert (wir testen die Views und Heller durch den Controller), können wir den Ordner spec erst einmal aufräumen:

$ rm - r spec/views spec/helpers

Nun kann man seine Installation per

$ rpsec --color spec

testen.

Schritt 2: Tests automatisieren

BDD kann süchtig machen. Vor allem, wenn die Tests vollkommen automatisch im Hintergrund Abläufen und der Entwickler bei jeder Änderung am Code sofort ein Feedback bekommt, wie viele Tests noch fehl schlagen.

Dafür braucht es nur sehr wenige Erweiterungen.

Eine Handvoll Edelsteine …

$ sudo gem install autotest
$ sudo gem install autotest-rails-pure
$ sudo gem install autotest-fsevent
$ sudo gem install autotest-growl

… sowie eine Konfigurationsdatei:

$ vim .autotest
require 'autotest/growl'
require 'autotest/fsevent'

Fertig.

Die Testumgebung kann jetzt über

$ autotest

gestartet werden.

________________________________________

Empfohlene Lektüre:
XP Rules: Test First! (en)
Introducing BDD by Dan North (en)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s