Ich arbeite gerade an einigen Testfällen, und ich stelle regelmäßig fest, dass ich in jedem Fall mit mehreren Behauptungen enden werde. Zum Beispiel (über vereinfachte und Kommentare der Kürze halbe gestrippt):Wie verhindert man "Überprüfungen" in einem Testfall? (C#/nUnit)
[Test]
public void TestNamePropertyCorrectlySetOnInstantiation()
{
MyClass myInstance = new MyClass("Test name");
Assert.AreEqual("Test Name", myInstance.Name);
}
Dieses im Prinzip akzeptabel aussieht, aber der Punkt des Tests ist, dass, wenn die die Klasse zu überprüfen, ob mit einem bestimmten Namen instanziert, die Name-Eigenschaft ist richtig eingestellt, aber es scheitert, wenn bei der Instantiierung etwas schief geht, bevor es überhaupt zur Behauptung kommt.
ich es so Refactoring:
[Test]
public void TestNamePropertyCorrectlySetOnInstantiation()
{
MyClass myInstance;
string namePropertyValue;
Assert.DoesNotThrow(() => myInstance = new MyClass("Test name"));
Assert.DoesNotThrow(() => namePropertyValue = myInstance.Name);
Assert.AreEqual("Test Name", namePropertyValue);
}
aber natürlich jetzt teste ich eigentlich drei Dinge hier; In diesem Test bin ich nicht daran interessiert, zu testen, ob die Instanz von MyClass erfolgreich instanziiert wurde oder ob die Name-Eigenschaft erfolgreich gelesen wurde. Diese Tests werden in einem anderen Fall getestet. Aber wie kann ich die letzte Behauptung testen, ohne vorher die beiden anderen zu behaupten, da es nicht möglich ist, den Test zu machen, wenn die ersten beiden fehlschlagen?
Wahr ... es geht nicht so sehr darum, sich an die "eine pro-Test-Aussage" zu halten, als einen roten Fleck gegen den Test zu sehen, wenn der Code, den er testet, gut funktioniert. – Flynn1179
@ Flynn1179: Warum hast du einen roten Fleck bekommen? Ich verstehe nicht, was du meinst. –
Sorry, ich habe vergessen zu erwähnen; Ich benutze ReSharper, um die nUnit-Tests auszuführen, es erscheint als roter Fleck in der Testliste, wenn ein Test fehlschlägt. Ich habe einige Tests, die wegen eines Fehlers fehlschlagen, bevor ich die eigentliche Behauptung durchführe. – Flynn1179