Wir verwenden NUnit & VisualStudio, um C# .NET-Code für eine Weile zu schreiben. Testing Ausnahmen wurden im Stil vonExceptionAsserts & Debuggen Ihres C# -Projekts in VS
alter Syntax getan:
[Test]
[ExpectException(typeof(ExceptionType))]
public void TestExceptionType()
{
}
Jetzt NUnit hat 2.5.2 freigegeben Version, die Assert.Throws(Type expectedExceptionType, TestDelegate code);
eingeführt Dies macht Ausnahme testet eine ganze Menge mehr flexibel. Unsere Ausnahme-Tests sehen nun wie folgt aus:
neue Syntax:
[Test]
public void TestWithNullBufferArgument()
{
ArgumentNullException ex = Assert.Throws<ArgumentNullException>(() => _testInstance.TestFunction(null));
// now you can examine the exception and it's properties
Assert.AreEqual(ex.Message, "Argument was null");
}
Unser Problem ist, dass, wenn Assert.Throws Visual Studio ein Fenster husten verwendet wird, wird eine nicht behandelte Ausnahme zeigt, wenn NUnit (entweder Konsole oder GUI-Runner) wird verwendet, um das Programm zu debuggen.
, um dies zu klären: Wir haben das VS-Projekt festgelegt, das die Komponententests zum Ausführen von nunit-x86.exe beim Debuggen enthält. (Siehe Projekteigenschaften, Registerkarte Debugging, Startaktion ist so eingestellt, dass sie nunit-x86.exe ausführt)
Dies hält NUnit davon ab, die Tests fortzusetzen. Es ist möglich, das Debugging/Unit-Testing durch Drücken von F5 fortzusetzen, aber dies ist keine praktikable Lösung.
Gibt es eine Möglichkeit, dies zu vermeiden? Probieren Sie es aus ... catch Block um die Assert.Throws tut nichts, da die Ausnahme im Delegate-Code passiert.
Ich hoffe, dass jemand etwas Licht darauf werfen kann.
Das Testbeispiel, das Sie anzeigen, entspricht nicht der von Ihnen angezeigten Syntax. Was meinst du auch, wenn NUnit ... verwendet wird, um das Programm zu debuggen? Meinen Sie, dass Sie nur Tests ausführen, oder führen Sie Tests im Debugger aus (ich weiß, dass TestDriven.NET das kann; wissen Sie nichts über die NUnit-Runner)? – Jay
Hallo Jay! Entschuldigung für die Verwirrung. Es gibt zwei verschiedene Syntaxtypen: neu und alt. Wir haben von alter Syntax auf neue Syntax umgestellt und verwenden jetzt die Bedingung Assert.Throws <>. Wir führen Tests in den Debuggern durch, es hat bisher gut funktioniert und es ist sehr einfach zu sehen, was schief läuft, da VS direkt zu dem Punkt springt, an dem eine Ausnahme verursacht wird. Mit der neuen Syntax erhalten wir alle Ausnahmetests als "falsch positive", wobei bei der alten Syntax nur echte Ausnahmen die Ausführung unterbrechen würden. –