Я совершенно новый на C# и NUnit.Является ли NUnit ExpectedExceptionAttribute единственным способом проверки, если что-то вызывает исключение?
В Boost.Test есть семейство BOOST_*_THROW
макросов. В тестовом модуле Python существует метод TestCase.assertRaises
.
Насколько я понимаю, в C# с NUnit (2.4.8) единственным методом проверки исключений является использование ExpectedExceptionAttribute
.
Почему я должен отдавать предпочтение ExpectedExceptionAttribute
over - допустим - подход Boost.Test? Какие рассуждения могут стоять за этим проектным решением? Почему это лучше в случае C# и NUnit?
Наконец, если я решил использовать ExpectedExceptionAttribute
, как я могу сделать некоторые дополнительные тесты после того, как исключение было поднято и выловлено? Предположим, что я хочу проверить требование, говоря, что объект должен быть действительным после того, как какой-либо сеттер поднял System.IndexOutOfRangeException
. Как бы вы исправили следующий код для компиляции и работы, как ожидалось?
[Test]
public void TestSetterException()
{
Sth.SomeClass obj = new SomeClass();
// Following statement won't compile.
Assert.Raises("System.IndexOutOfRangeException",
obj.SetValueAt(-1, "foo"));
Assert.IsTrue(obj.IsValid());
}
Edit: Спасибо за ваши ответы. Сегодня я нашел Это тестыblog entry, где упоминаются все три описанных вами метода (и еще одно незначительное изменение). Это позор, что я не мог найти его, прежде чем :-(
+1. Я предпочитаю использовать этот стиль, поскольку для написания теста требуется меньше церемоний, особенно если вам нужно сохранить ссылку для проверки сообщений и т. Д. Вы также можете использовать var exception = Assert.Throws (() => myInstance.DoSomethingInvalid ()); –
2010-06-27 02:35:30