ruby-koans: Test driven ruby learning

Recently I found ruby-koans on github. If I should discribe it in a few words I would say it’s a test driven ruby tutorial.

After downloading ruby-koans you call rake and you see the first failing test.

Thinking AboutAsserts
test_assert_truth has damaged your karma.You have not yet reached enlightenment …
<false> is not true.

Please meditate on the following code:
./about_asserts.rb:10:in `test_assert_truth‘
path_to_enlightenment.rb:29

Then you take a look at the test-file


# We shall contemplate truth by testing reality, via asserts.
def test_assert_truth
assert false                # This should be true
end# Enlightenment may be more easily achieved with appropriate
# messages.
def test_assert_with_message
assert false, „This should be true — Please fix this“
end

# To understand reality, we must compare our expectations against
# reality.
def test_assert_equality
expected_value = __
actual_value = 1 + 1

assert expected_value == actual_value
end

By correcting the tests you learn much about ruby and tests – step by step.

Like meta programming in ruby this is a meta-way in learning ruby.

Design patterns in ruby

Stefano Mancini has started several posts about design patterns in ruby. You can find the introduction to this series here. Stefano will publish the source code of his examples on github.

The first part of the series is about factories.  Stefano introduces factories as followed:

„An abstract Factory provides a common interface for creating families of related objects together.
The client object does not bother to build objects directly, but it calls the methods provided by this common interface.“

Kneifender und schubbernder Platy

Heute Morgen, als das Licht im Aquarium anging, musste ich beobachten, wie einer der Platys seine Flossen doch ziemlich zusammengekniffen hat. In der Regel weiß ich dann schon, dass irgendetwas im Busch ist, wenn das länger anhält.

Hinzu kam nun noch, dass er sich auch mehrfach an den Pflanzen im Aquarium geschubbert hat. Ich werde dies nun die nächsten Tage noch beobachten müssen.

Posterous, ein Leben zwischen Twitter und Blog

Ich werde nun auch posterous mal ein wenig Zeit widmen und starte daher unter http://jerrywho.posterous.com den Versuch, auch ggf. von unterwegs meinen Senf zu irgendwelchen Dingen abzugeben, die sich nicht in die 140 Zeichen, die Twitter bereit stellt, pressen lassen.

Das besondere an posterous ist nun, dass man einfach per E-Mail seine Beiträge schreiben kann und diese dann an posterous schickt. Dort wird dann daraus der passende Blog Eintrag erstellt.

Ich werde auch versuchen, dort in englisch zu schreiben. Auch wenn mir dies sicherlich erstmal etwas schwerer fallen wird, hoffe ich doch, damit mehr Leser zu erreichen.

Also lassen wir uns einfach mal überraschen, wie dies so ankommt.

 

Jeffery Deaver: Der fauler Henker

Jeffrey Deavers Der faule Henker spielt eigentlich vor dem Teufelsspiel, ich habe es aber erst jetzt gelesen. Von daher war leider eine Kleinigkeit von vornherein klar, die ich hier aber nicht verraten will.

Insgesamt ist dieses Buch aber ein echter Knaller: Immer, wenn man glaubt zu wissen, worum es ungefähr geht, dreht es sich um 180 Grad. Manchmal ist es etwas unglaubwürdig, aber es macht richtig Spaß, dieses Buch zu lesen.

iCuke: BDD für das iPhone

Durch einen Tweet stieß ich auf einen kurzen Videofilm, in dem iCuke kurz vorgestellt wird. Es handelt sich dabei um die Möglichkeit, iPhone-Applikation per Cucumber zu testen.

Man schreibt einen Test der Art

Background:
Given "iCuke" from "app/iCuke/iCuke.xcodeproj" is loaded in the simulator

Scenario: User views the About screen
When I tap "About"
Then I should see "Author:"

 Lässt man dann den Test ablaufen, wird die App im Simulator gestartert, die passenden Aktion ausgeführt und die Ausgaben mit den Vorgaben verglichen. Das Verhalten entspricht also ungefähr dem, was man von Cucumber im Web-Umfeld her kennt. Ich hätte nicht gedacht, dass sich das so für Apps so umsetzen lässt.

Ich habe es auch gleich mal ausprobiert. Mitgeliefert wird das obige Beispiel.

Zunächst musste ich feststellen, dass es mit Ruby 1.9.1 wohl nicht funktioniert. RVM sei Dank, habe ich es dann gleich mal unter Ruby 1.8.7 ausprobiert. Und siehe da, ein paar wenige installierte gems später lief der Test durch. Wichtig sind hierbei die Einstellungen, die man beim Mac und im iPhone Simulator vornehmen muss, damit die Ausgaben entsprechend zurückgeliefert werden können und die Events an die App durchgereicht werden können. Dies wird aber in dem oben verlinkten Video gut beschrieben.

Das ganze Projekt befindet sich noch in der Anfangsphase. Das bedeutet zum Beispiel, dass noch nicht alle Eingabe-Varianten möglich sind. Schaut man sich aber auf github die Häufigkeit der Commits an, so bin ich optimistisch, dass daraus sehr bald ein vollwertiges Tool für Behaviour-Driven-Development auf dem iPhone entsteht.