Ich schreibe einige Unit-Tests mit NUnit 3.0 und im Gegensatz zu v2.x ExpectedException()
aus der Bibliothek entfernt.
Basierend darauf Antwort kann ich definitiv die Logik erkennen, wenn ich versuche, genau zu erfassen, wo im Test erwartet wird, dass das System eine Ausnahme auslöst (anstatt nur "irgendwo im Test" zu sagen).
Ich neige jedoch dazu, meine Schritte "Anordnen", "Handeln" und "Durchsetzen" sehr deutlich zu machen, und dies macht es zu einer Herausforderung.
Ich habe so etwas gemacht wie:
[Test, ExpectedException(typeof(FormatException))]
public void Should_not_convert_from_prinergy_date_time_sample1()
{
//Arrange
string testDate = "20121123120122";
//Act
testDate.FromPrinergyDateTime();
//Assert
Assert.Fail("FromPrinergyDateTime should throw an exception parsing invalid input.");
}
Jetzt muss ich etwas tun wie:
[Test]
public void Should_not_convert_from_prinergy_date_time_sample2()
{
//Arrange
string testDate = "20121123120122";
//Act/Assert
Assert.Throws<FormatException>(() => testDate.FromPrinergyDateTime());
}
Das ist nicht schrecklich, aber meiner Meinung nach trübt es das Gesetz und die Behauptung. (Offensichtlich ist es für diesen einfachen Test nicht schwer zu befolgen, aber bei größeren Tests kann es schwieriger sein).
Ich habe von einem Kollegen vorgeschlagen, dass ich alles los werde Assert.Throws
und einfach so etwas mache wie:
[Test]
public void Should_not_convert_from_prinergy_date_time_sample3()
{
//Arrange
int exceptions = 0;
string testDate = "20121123120122";
//Act
try
{
testDate.FromPrinergyDateTime();
}
catch (FormatException) { exceptions++;}
//Assert
Assert.AreEqual(1, exceptions);
}
Hier halte ich mich an das strenge AAA-Format, aber auf Kosten von noch mehr Aufblähung.
Meine Frage geht also an AAA-Tester: Wie würden Sie eine Art Ausnahmevalidierungstest durchführen, wie ich es hier versuche?