2010-10-18

BDD med StoryQ

Som en opfølgning på Simpel Behavior Driven Development posten, vil jeg her vise hvordan testcasen kunne se ud, hvis man istedet for havde brugt StoryQ.

[TestMethod]
public void AdditionTest()
{
new Story("Addition of numbers")
    .InOrderTo("Calculate a sum")
    .AsA("Accountant")
    .IWant("to add two numbers")
 
    .WithScenario("adding a positive number with a positive number")
    .Given(ACalculator)
    .When(_IsAddedTo_, 1, 2)
    .Then(TheResultShouldBe_,3)
 
    .WithScenario("adding a zero with a positive number")
    .Given(ACalculator)
    .When(_IsAddedTo_,0,2)
    .Then(TheResultShouldBe_,0)
 
    .WithScenario("adding a negative number with a positive number")
    .Given(ACalculator)
    .When(_IsAddedTo_,-1,2)
    .Then(TheResultShouldBe_,0)
    .ExecuteWithReport();
}

private Calculator sut { get; set; }
private int actual { get; set; }

private void ACalculator()
{
sut = new Calculator();
}

private void _IsAddedTo_(int firstNumber, int secondNumber)
{
actual = sut.Add(firstNumber, secondNumber);
}

private void TheResultShouldBe_(int expected)
{
Assert.AreEqual(expected, actual);
}

Når man kører denne test med MSTest får man automatisk genereret en html rapport med følgende information:


Hvis man sammenligner med resultatet fra den simple metode, kan man se at der her er fokuseret på det væsentlige nemlig om kravene er opfyldt.


Samt at User Storyen med tilhørende krav er bedre beskrevet på denne måde.

Hvis man tager i betragtning at det eneste der skal til for at få dette resultat er at inkludere en ekstra assembly i sit testprojekt, så synes jeg at det virkelig er noget der kan bruges til noget.

Det kræver selvfølgelig en lidt anderledes måde at skrive testcases på, men egentlig ikke noget der kræver væsentligt flere kodelinier, måske endda færre.

I dette tilfælde steg antal kodelinier med 50%, men hvis man havde forsøgt at beskrive @bakkegaard's eksempel fra den tidligere blogpost med begge metoder, ville det nok nærmere være 50% færre kodeliner.

Ingen kommentarer:

Tilføj en kommentar