2010-08-16 3 views
6

Also, ich bin neu in Komponententests, und noch mehr, um die erste Entwicklung zu testen. Ist es für mich gültig, nur eine einzige assert.isTrue-Anweisung in meinem Komponententest zu haben, in der ich meine Methode und einen gültigen Parameter übergebe und sie mit der bekannten guten Antwort vergleiche?Ist es zulässig, Komponententests nur mit einer assert-Anweisung zu haben?

Methode

public static string RemoveDash(string myNumber) 
    { 
     string cleanNumber = myNumber.Replace("-",""); 
     return cleanNumber; 
    } 

-Test

[TestMethod()] 
    public void TestRemoveDash() 
    { 
     Assert.IsTrue(RemoveDash("50-00-0")=="50000"); 
    } 

Antwort

10

Das ziemlich gültig ist, wenn es um die Funktionalität Ihrer Methode testet, was es scheint sehr viel zu tun werden.

Könnte stattdessen Equals hier verwenden, aber es spielt keine Rolle. Außerdem weiß ich, dass dies ein Testbeispiel ist, aber stellen Sie immer sicher, dass Fälle getestet werden, in denen die Eingabe nicht das erwartete ist, sowie andere gültige Formen, in die sie kommen kann (dies kann in derselben Testmethode oder in einer anderen davon sein) auf Ihre Präferenz)

+1

Ein weiterer Grund, Assert.Equals in diesem Fall vorzuziehen, besteht darin, dass Sie ein nützliches Feedback erhalten, wenn es nicht funktioniert und Sie nicht so viel nachprüfen müssen. (d. h. etwas wie "erwartet" 50000, aber war "5000-0" statt "erwartet wahr, aber falsch"). Prost – Berryl

2

Dies scheint vollkommen gültig - aber warum nicht ein paar andere Tests in dieser Methode, in die gleiche Richtung, sondern testen, dass z RemoveDash("-") == "" und RemoveDash("-5") == "5" usw.?

+0

Danke für die Eingabe Will. Das ist eine einfache Änderung, die Sie in Zukunft umsetzen und sich merken müssen. –

10

Tester lesen manchmal unsere Tests, also versuche ich, sie so lesbar wie möglich zu machen. Ich würde es vorziehen, die folgenden zu verwenden, anstatt die einzelne Assert:

[TestMethod()] 
public void TestRemoveDash() 
{ 
    string expected = "50000"; 
    string actual = RemoveDash("50-00-0"); 
    Assert.AreEqual(expected,actual); 
} 
+0

Danke Fletcher. Ich kann sehen, wie das das Lesen erleichtert. –

+1

+1 Ich würde lokale Variablen nicht für etwas so Kurzes verwenden, aber AssertEquals() oder das Äquivalent ist im Allgemeinen hilfreich, da es beide Werte bei einem Testfehler normalerweise druckt, so dass es einfacher ist herauszufinden, was das Problem ist. –

6

Der einzige Kommentar ist Assert.AreEqual zu verwenden, statt Assert.IsTrue:

Assert.IsAreEqual("50000", RemoveDash("50-00-0")); 

Der Grund dafür ist, dass, wenn der Test nicht die Die Fehlermeldung, die Sie erhalten, ist aussagekräftiger für das, was geschehen sollte und was tatsächlich geschehen ist. Eine Meldung mit der Meldung "Erwarteter Wert < 50000> war aber tatsächlich < 50-00-0>" ist viel besser als "Erwarteter Wert ist wahr, aber war falsch."

Als Faustregel gilt, wenn Sie sich Assert.IsTrue verwenden wollen finden, gehen Sie durch Assert Methoden und sehen, ob es eine bessere Methode ist Ihre Erwartung zu testen (z Assert.IsInstanceOfType, Assert.IsNotNull, etc).

+0

Danke für die weitere Information Igor! –

Verwandte Themen