我有一些代码声明在调用方法时抛出异常,然后在异常上声明各种属性:
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>());
但是,我无法弄清楚如何从中返回异常,因此我可以执行后续的属性断言。有什么想法吗?
答案 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());
<强>优点/缺点:强>
Assert.That
之类的语法就是为了它的流畅可读性。