如何使用Assert获得抛出的异常。那么,Assert.Throws <t> </t>

时间:2012-03-28 12:00:33

标签: .net nunit nunit-2.5.9

我有一些代码声明在调用方法时抛出异常,然后在异常上声明各种属性:

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 个答案:

答案 0 :(得分:1)

不幸的是,我认为您不能使用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之类的语法就是为了它的流畅可读性。