Da ich gerade mein Abalone Projekt neu aufsetze, will ich das Ganze dieses mal test-driven entwickeln. Dabei will ich, wenn es um das Verhalten von Controlern und diverser Objekte geht auf den BDD-Style setzen. Bei diesem Style geht es darum, dass Tests weniger wie Tests aussehen, sondern eher wie die Spezifikation des Systems. So beschreibt ein BDD-Test eine Aktion und was als Ergebnis erwartet wird.
Man hätte dann etwas in folgender Form:
When the application was told to register a new user
-a new user will be created
-a register email will be send
-a success message will be shown
Dahinter würden sich nun entsprechende Methodenaufrufe verbergen die verifizieren ob die Anforderungen eingehalten werden. Das hat den Vorteil, dass man noch nach einer langen Zeit genau weiss, wie sich das Objekt verhalten sollte. Der andere Vorteil ist, dass man dem der die Anforderungen stellt (z. B. der Kunde oder Chef), die Tests als Protokoll zeigen kann.
Ich komme jetzt gerade auf das Thema, weil ich dabei bin Anforderungen für mein Eingangsportal zu sammeln. Jetzt wollte ich anfangen den ersten BDD-Test für mein Projekt zu schreiben. Da ist mir aufgefallen, dass ich noch keine BDD-Lib habe um eine schöne Lesbare Syntax hin zu bekommen. Vor allem für das Setup und Asserts von gemockten Objekten habe ich mir überlegt wie kann man eine schöne lesbare Syntax hinbekommen. In Anlehnung an schon bekannte Frameworks habe ich mir für das Setup Folgende Syntax überlegt und in einem standard Unit-Test spezifiziert:
[Test]
public void when_a_mockobject_was_told_to_return_a_value_it_will_return_it() {
var mockRepository = new MockRepository();
var testobject = mockRepository.Stub<ITestDependency>();
When.The(testobject).was_told_to(x => x.DoSomething(4)).Then.Return("success");
mockRepository.ReplayAll();
string result = testobject.DoSomething(4);
result.will_be_equal_to("success");
mockRepository.VerifyAll();
}
public interface ITestDependency
{
string DoSomething(int value);
}
Also ich finde, dass die Zeile
'When.The(testobject).was_told_to(x => x.DoSomething(4)).Then.Return("success");'
schon sehr fluffig aussieht. Was man nicht alles für Spielereien machen kann :-)
Abonnieren
Kommentare zum Post (Atom)
Keine Kommentare:
Kommentar veröffentlichen