2013-08-18 6 views
5

Verwenden TDD ersten Mal in meinem Leben heute. Ich benutze nUnit.TDD nUnit mehrere behauptet für eine Methode

Ich habe eine Methode, wo ich mehrere verschiedene Eingänge einfügen und überprüfen kann, ob das Ergebnis funktioniert.

Ich lese, dass mehrere Behauptungen in einem Test kein Problem ist, und ich möchte wirklich nicht neue Test für jeden Eingang schreiben.

Beispiel mit mehreren behauptet:

[TestFixture] 
public class TestClass 
{ 

    public Program test; 

    [SetUp] 
    public void Init() 
    { 
     test = new Program(); 

    } 
    [Test] 
    public void Parse_SimpleValues_Calculated() 
    { 
     Assert.AreEqual(25, test.ParseCalculationString("5*5")); 
     Assert.AreEqual(125, test.ParseCalculationString("5*5*5")); 
     Assert.AreEqual(10, test.ParseCalculationString("5+5")); 
     Assert.AreEqual(15, test.ParseCalculationString("5+5+5")); 
     Assert.AreEqual(50, test.ParseCalculationString("5*5+5*5")); 
     Assert.AreEqual(3, test.ParseCalculationString("5-1*2")); 
     Assert.AreEqual(7, test.ParseCalculationString("7+1-1")); 
    } 
} 

Aber wenn etwas schiefgeht es ist sehr schwer zu lesen, die gescheitert behaupten, ich meine, wenn man sie viel haben, müssen Sie durch alle gehen und die richtige assert finden .

Gibt es eine elegante Möglichkeit zu zeigen, welche Eingabe wir gesetzt haben, wenn Assert fehlschlägt, statt Ergebnis und erwartetem Ergebnis?

Vielen Dank.

+0

Meiner Meinung nach sollten Sie * einen * Test für jeden Testfall haben. Ihr Test sollte einen Grund zum Scheitern haben: Sie haben den Code geändert, der Ihren Testfall zerstört hat. Was passiert, wenn Sie einen Teil Ihrer Analyselogik ändern, sodass Additionsoperationen fehlschlagen, die Subtraktion jedoch in Ordnung ist? Wenn Sie einen Testfall haben, wird sowohl die Addition als auch die Subtraktion fehlschlagen. –

Antwort

10

Ich meine, wenn Sie sie viel haben, so müssen Sie alle durchlaufen.

Nein, Sie nicht - Sie sehen nur die Stack-Trace. Wenn Sie die Tests innerhalb einer IDE ausführen, finde ich, dass dies gut genug ist, um herauszufinden, welche Zeile fehlgeschlagen ist.

Das heißt, dort ist ein (deutlich) besserer Weg - parametrisierte Tests mit TestCaseAttribute. So zum Beispiel:

[Test] 
[TestCase("5*5", 25)] 
[TestCase("5*5*5", 125)] 
[TestCase("5+5", 10)] 
// etc 
public void Parse_SimpleValues_Calculated(string input, int expectedOutput) 
{ 
    Assert.AreEqual(expectedOutput, test.ParseCalculationString(input)); 
} 

Jetzt wird Ihr Gerät zu testen Läufer Sie jeden Testfall separat zeigen, und Sie werden in der Lage sein zu sehen, welche ausfällt. Darüber hinaus wird es alle der Tests ausgeführt, auch wenn eine frühe fehlschlägt - so dass Sie am Ende nicht zu beheben, nur um festzustellen, dass die nächste unerwartet fehlgeschlagen ist.

Es gibt auch TestCaseSourceAttribute für Fälle, in denen Sie eine Sammlung von Eingängen separat angeben möchten - z. über mehrere Tests hinweg zu verwenden.

+0

Das ist, was ich wollte, wow du bist Genie. Ich wusste nicht, wie man nach diesen parametrisierten Tests fragt. Danke mein Herr. –

+1

@JohnMathilda: Weit weg von einem Genie - ich bin gerade selbst im selben Boot gewesen :) –

Verwandte Themen