Jak przetestować wyjątki w TestCase z NUnit3?Testowanie wyjątków za pomocą atrybutu [TestCase] w NUnit 3?
Powiedzmy mam metoda Divide(a,b)
zdefiniowane następująco:
public double Divide(double a, double b)
{
if(Math.Abs(b) < double.Epsilon) throw new ArgumentException("Divider cannot be 0");
return a/b;
}
Chcę przetestować tę metodę przy użyciu NUnit 3,0 przypadków testowych, więc może mam:
[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));
}
Czy istnieje sposób, aby określić przypadek testowy, który spowoduje, że Divide() wyrzuci wyjątek ArgumentException i jakoś to będzie miało oczekiwany wynik, np. coś wzdłuż linii:
[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));
}
(Oczywiście mógłbym zdefiniować oddzielne metody badawczej i używać Assert.Throws()
w tym, więc jest to czysto z ciekawości)
Jeśli naprawdę chciał wymusić dwa w jednym przypadku testowego, można dodać logiczną throwsException argument i go przetestować. Obecność jednak - jeśli nie - i dwóch całkowicie odmiennych oczekiwań świadczy o tym, że tak naprawdę powinny to być dwa różne testy. – Charlie
Niższa składnia wydaje się nie działać na moim systemie (NUnit 3.2.1) podczas korzystania ze statycznego wywołania metody ... - wystarczająco zabawne, 'Assert.Throws (() => MyStaticClass.MyStaticMethod (badparameter)) 'działa. –
ChriPf
Dzięki @ChriPf - Myślę, że powinien to być func. Zmontowałem to. – Chris