Как получить выброшенное исключение с помощью Assert.That, а-ля Assert.Throws <T> - PullRequest
1 голос
/ 28 марта 2012

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

var ex = Assert.Throws<MyCustomException>(() => MyMethod());
Assert.That(ex.Property1, Is.EqualTo("Some thing");
Assert.That(ex.Property2, Is.EqualTo("Some thing else");

Я бы хотел преобразовать вызов Assert.Throws<T> в синтаксис Assert.That, так как это мое личное предпочтение:

Assert.That(() => MyMethod(), Throw.Exception.TypeOf<MyCustomException>());

Однако я не могу понять, как вернуть исключение из этого, поэтому я могу выполнить последующие утверждения свойств. Есть идеи?

1 Ответ

1 голос
/ 28 марта 2012

К сожалению, я не думаю, что вы можете использовать Assert.That для возврата исключения как Assert.Throws. Однако вы все равно можете программировать в более свободном стиле, чем в первом примере, используя один из следующих вариантов:

Вариант 1 (наиболее свободно / читабельно)

Assert.That(() => MyMethod(), Throws.Exception.TypeOf<MyCustomException>()
    .With.Property("Property1").EqualTo("Some thing")
    .With.Property("Property2").EqualTo("Some thing else"));

Вариант 2

Assert.Throws(Is.Typeof<MyCustomException>()
    .And.Property( "Property1" ).EqualTo( "Some thing")
    .And.Property( "Property2" ).EqualTo( "Some thing else"),
    () => MyMethod());

Плюсы / Минусы:

  • Недостатком является жесткое кодирование имен свойств.
  • Плюс в том, что у вас есть одно непрерывное беглое выражение вместо того, чтобы разбивать его на 3 отдельных выражения Смысл использования Assert.That -подобного синтаксиса заключается в его удобочитаемости.
...