Я не уверен, что то, что вы пробовали, доставляет вам неприятности, но вы можете просто передать лямбду в качестве первого аргумента Assert.Throws. Вот один из моих тестов, который проходит:
Assert.Throws<ArgumentException>(() => pointStore.Store(new[] { firstPoint }));
Хорошо, этот пример мог быть немного многословным. Предположим, у меня был тест
[Test]
[ExpectedException("System.NullReferenceException")]
public void TestFoo()
{
MyObject o = null;
o.Foo();
}
, который обычно проходит, потому что o.Foo()
вызовет исключение нулевой ссылки.
Затем вы удалили бы атрибут ExpectedException
и поместили бы ваш вызов на o.Foo()
в Assert.Throws
.
[Test]
public void TestFoo()
{
MyObject o = null;
Assert.Throws<NullReferenceException>(() => o.Foo());
}
Assert.Throws
"пытается вызвать фрагмент кода, представленный как делегат, чтобы убедиться, что он выдает конкретное исключение." Синтаксис () => DoSomething()
представляет собой lambda , по сути, анонимный метод. Поэтому в этом случае мы говорим Assert.Throws
выполнить фрагмент o.Foo()
.
Так что нет, вы не просто добавляете одну строку, как вы делаете атрибут; вам нужно явно обернуть раздел вашего теста, который сгенерирует исключение, при вызове Assert.Throws
. Вам не обязательно обязательно использовать лямбду, но это часто наиболее удобно.