Die meisten Antworten hier beziehen sich auf Best Practices für Unit-Tests im Allgemeinen (wann, wo, warum und was), anstatt die Tests selbst zu schreiben (wie). Da die Frage im "Wie" -Teil ziemlich spezifisch zu sein schien, dachte ich, ich würde dies posten, entnommen aus einer "Brown Bag" -Präsentation, die ich in meiner Firma durchgeführt habe.
Womps 5 Gesetze zum Schreiben von Tests:
1. Verwenden Sie lange, beschreibende Testmethodennamen.
- Map_DefaultConstructorShouldCreateEmptyGisMap()
- ShouldAlwaysDelegateXMLCorrectlyToTheCustomHandlers()
- Dog_Object_Should_Eat_Homework_Object_When_Hungry()
2. Schreiben Sie Ihre Tests im Arrangier- / Act- / Assert-Stil .
- Während diese Organisationsstrategie schon seit einiger Zeit existiert und viele Dinge nennt, war die Einführung des Akronyms "AAA" in letzter Zeit eine großartige Möglichkeit, dies zu vermitteln. Wenn Sie alle Ihre Tests mit dem AAA-Stil in Einklang bringen, sind sie leicht zu lesen und zu warten.
3. Geben Sie bei Ihren Asserts immer eine Fehlermeldung an.
Assert.That(x == 2 && y == 2, "An incorrect number of begin/end element
processing events was raised by the XElementSerializer");
- Eine einfache, aber lohnende Übung, die in Ihrer Runner-Anwendung deutlich macht, was fehlgeschlagen ist. Wenn Sie keine Nachricht angeben, wird in Ihrer Fehlerausgabe normalerweise so etwas wie "Erwartet wahr, war falsch" angezeigt, sodass Sie den Test tatsächlich lesen müssen, um herauszufinden, was falsch ist.
4. Kommentieren Sie den Grund für den Test - wie lautet die Geschäftsannahme?
/// A layer cannot be constructed with a null gisLayer, as every function
/// in the Layer class assumes that a valid gisLayer is present.
[Test]
public void ShouldNotAllowConstructionWithANullGisLayer()
{
}
- Dies mag offensichtlich erscheinen, aber diese Vorgehensweise schützt die Integrität Ihrer Tests vor Personen, die den Grund für den Test überhaupt nicht verstehen. Ich habe gesehen, dass viele Tests entfernt oder geändert wurden, die vollkommen in Ordnung waren, einfach weil die Person die Annahmen, die der Test verifizierte, nicht verstand.
- Wenn der Test trivial ist oder der Methodenname ausreichend beschreibend ist, kann es zulässig sein, den Kommentar wegzulassen.
5. Jeder Test muss immer den Status einer Ressource zurücksetzen, die er berührt
- Verwenden Sie nach Möglichkeit Mocks, um den Umgang mit realen Ressourcen zu vermeiden.
- Die Bereinigung muss auf Testebene erfolgen. Tests dürfen sich nicht auf die Reihenfolge der Ausführung verlassen.