2010-08-16 13 views
6

Tak więc, jestem nowy w testowaniu jednostkowym, a jeszcze bardziej, aby przetestować pierwszy rozwój. Czy dla mnie ważne jest, aby w moim teście jednostkowym miałem tylko jedną instrukcję assert.isTrue, w której przekazuję moją metodę i prawidłowy parametr i porównuję ją ze znaną dobrą odpowiedzią?Czy ważna jest próba jednostkowa z tylko instrukcją?

Metoda

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

test

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

Odpowiedz

10

To dość ważna, gdy testuje to funkcjonalność, która to metoda bardzo zdaje się robić.

Być może rozważymy tutaj użycie opcji Równa się, ale to naprawdę nie ma znaczenia. Ponadto, wiem, że jest to przykład testowy, ale zawsze upewnij się, że testowane są przypadki, w których dane wejściowe nie są zgodne z oczekiwaniami oraz inne ważne formularze (może to być ta sama metoda testowa lub inna w zależności od metody). zgodnie z twoimi preferencjami)

+1

Innym powodem, dla którego warto wybrać program Assert.Equals w tym przypadku, jest to, że otrzymasz przydatne informacje zwrotne, gdy się nie powiedzie i nie będą musiały myśleć o debugowaniu. (np. coś podobnego do "oczekiwanego" 50000, ale "5000-0" "zamiast" oczekiwano, ale było fałszywe "). Pozdrowienia – Berryl

2

To wydaje się być całkowicie poprawne - jednak, dlaczego nie włączyć kilku innych testów w tej metodzie, wzdłuż tych samych linii, ale testując, że np. RemoveDash("-") == "" i RemoveDash("-5") == "5" itp?

+0

Dzięki za wejście Will. To łatwa zmiana do wdrożenia i należy pamiętać, aby zrobić to w przyszłości. –

10

Testerzy czasami czytają nasze testy, więc staram się, aby były jak najbardziej czytelne. Wolałbym użyć następujących zamiast jednolitego dochodzić:

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

Dzięki fletcher. Widzę, jak to ułatwia czytanie. –

+1

+1 Nie użyłbym zmiennych lokalnych dla czegoś tak krótkiego, ale AssertEquals() lub odpowiednik jest generalnie przydatny, ponieważ (zwykle) będzie drukować obie wartości podczas testu, więc łatwiej jest ustalić, jaki jest problem. –

6

Jedyny komentarz jest użycie Assert.AreEqual zamiast Assert.IsTrue:

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

Powodem tego jest to, że jeśli test nie otrzymany komunikat o błędzie jest bardziej opisowy, co miało się wydarzyć i co faktycznie się wydarzyło. Komunikat "Oczekiwana wartość: < 50000>, ale faktycznie był < 50-00-0>" jest dużo lepszy niż "Oczekiwana wartość jest prawdziwa, ale zawierała fałsz".

Jako zasada, kiedy znajdziesz się chcąc skorzystać Assert.IsTrue, przejść przez Assert metod i sprawdzić, czy istnieje lepszy sposób, aby przetestować swoje oczekiwania (np Assert.IsInstanceOfType, Assert.IsNotNull, etc).

+0

Dzięki za dalsze informacje Igor! –

Powiązane problemy