Использовать Нанит Утверждать.Бросает метод или атрибут ExpectedException?



Я обнаружил, что это, кажется, два основных способа тестирования исключений:



Assert.Throws<Exception>(()=>MethodThatThrows());

[ExpectedException(typeof(Exception))]


какой из них будет лучше? Дает ли одно преимущество перед другим? Или это просто вопрос личных предпочтений?

686   5  

5 ответов:

первый позволяет проверить более одного исключения, с несколькими вызовами:

Assert.Throws(()=>MethodThatThrows());
Assert.Throws(()=>Method2ThatThrows());

второй позволяет тестировать только одно исключение для каждой тестовой функции.

основным отличием является:

ExpectedException() атрибут делает тест пройден, если исключение происходит в любой место в методе теста.
Использование Assert.Throws() позволяет указать exact место кода, где ожидается исключение.

NUnit 3.0 падает официальная поддержка ExpectedException в целом.

Итак, я определенно предпочитаю использовать Assert.Throws() метод, а не .

Я предпочитаю утверждать.бросает, так как это позволяет мне проверять и утверждать другие условия после того, как исключение брошено.

    [Test]
    [Category("Slow")]
    public void IsValidLogFileName_nullFileName_ThrowsExcpetion()
    {
        // the exception we expect thrown from the IsValidFileName method
        var ex = Assert.Throws<ArgumentNullException>(() => a.IsValidLogFileName(""));

        // now we can test the exception itself
        Assert.That(ex.Message == "Blah");

    }

вы также можете сильно ввести ожидаемую ошибку (например, старую версию attrib).

Assert.Throws<System.InvalidOperationException>(() => breakingAction())

Если вы используете старые версии() из NUnit тогда вам нужно использовать ExpectedException.

Если вы используете 2.5 или более поздней версии, то вы можете использовать Assert.Throw()

https://github.com/nunit/docs/wiki/Breaking-Changes

как использовать: https://www.nunit.org/index.php?p=exceptionAsserts&r=2.5

Comments

    Ничего не найдено.