Wie kann ich Ausnahmen in einem Testfall mit NUnit3 testen?Testen auf Ausnahmen mit [TestCase] -Attribut in NUnit 3?
Lassen Sie uns sagen, ich habe eine Methode Divide(a,b)
wie folgt definiert:
public double Divide(double a, double b)
{
if(Math.Abs(b) < double.Epsilon) throw new ArgumentException("Divider cannot be 0");
return a/b;
}
ich diese Methode mit NUnit 3.0 Testfälle testen wollen, vielleicht habe ich:
[TestCase(-10, 2, -5)]
[TestCase(-1, 2, -0.5)]
public void TestDivide(double a, double b, double result)
{
Assert.That(_uut.Divide(a, b), Is.EqualTo(result));
}
Gibt es eine Möglichkeit, einen Testfall anzugeben, der bewirkt, dass Divide() eine ArgumentException auslöst und diese wie erwartet hat, z etwas entlang der Linien von:
[TestCase(-10, 2, -5)]
[TestCase(-1, 2, -0.5)]
[TestCase(-1, 0, ExpectedResult = TypeOf(ArgumentException)]
public void TestDivide(double a, double b, double result)
{
Assert.That(_uut.Divide(a, b), Is.EqualTo(result));
}
(Natürlich, ich könnte ein separates Testverfahren definieren und Assert.Throws()
in diesen, so ist dies rein aus Neugier)
Wenn Sie wirklich die beiden in einem einzigen Testfall zwingen wollten, könnten Sie ein boolean throwsException Argument hinzufügen und testen. Das Vorhandensein eines Wenn-dann-sonst und zweier ganz anderer Erwartungen würde jedoch beweisen, dass dies wirklich zwei verschiedene Tests sein sollten. – Charlie
Die niedrigere Syntax scheint auf meinem System (NUnit 3.2.1) nicht zu funktionieren, wenn ich einen statischen Methodenaufruf verwende ... - witzigerweise, Assert.Throws (() => MyStaticClass.MyStaticMethod (badparameter)) 'funktioniert. –
ChriPf
Danke @ChriPf - Ich denke, es sollte ein Func sein. Ich habe es bearbeitet. – Chris