Тестирование исключений с атрибутом [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>());
}