Тестирование исключений с атрибутом [TestCase] в NUnit 3?
Как проверить исключения в тестовом наборе с NUnit3?
Допустим, у меня есть метод Divide(a,b)
определен следующим образом:
public double Divide(double a, double b)
{
if(Math.Abs(b) < double.Epsilon) throw new ArgumentException("Divider cannot be 0");
return a/b;
}
Я хочу протестировать этот метод с помощью тестовых примеров NUnit 3.0, поэтому, возможно, у меня есть:
[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));
}
есть ли способ указать тестовый случай, который заставит Divide () бросить ArgumentException и каким-то образом иметь это в качестве ожидаемого результата, например, что-то вроде:
[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));
}
(конечно, я можно определить отдельный метод тестирования и использовать Assert.Throws()
в этом, так это чисто из любопытства)
1 ответов
ExpectedException
был бы правильным методом для NUnit 2.X, но он был удален из NUnit 3.
есть различные фрагменты обсуждения в NUnit Google Group и эквивалентная группа разработчиков-но, похоже, было принято решение, что это, как правило, лучший шаблон проектирования для тестирования ожидаемых результатов и исключений в отдельных методах. (ссылке)
единственный способ сделать это в NUnit 3, было бы разбить его на два отдельный тест. (Подтверждено в аналогичном вопросе, на который ответила основная команда NUnit,здесь.)
[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));
}
[TestCase(-1, 0)]
public void TestDivideThrows(double a, double b)
{
Assert.That(() => _uut.Divide(a, b), Throws.TypeOf<ArgumentException>());
}