我想断言抛出异常,然后检查抛出异常的一些属性。
我的印象是我可以做以下事情:
ICommand command = CreateCommandObj();
Assert.That( () => command.DoWork(), Throws.TypeOf<ArgumentException>(),
Has.Property("ParamName").EqualTo("myParam") &
Has.Property("Message").EqualTo("myMessage") );
然而,这甚至没有编译并查看Assert的预期参数。我看不出我怎么能这样做?我确定我之前已经使用过这个......
注意以上是一个人为的例子来说明这一点,忽略我正在寻找除了任何参数之外的方法的ArgumentException:)
任何帮助表示感谢。
1)无法将lambda表达式转换为'object'类型,因为它不是委托类型。
答案 0 :(得分:7)
好的,排序。
我需要使用以下语法:
ICommand command = CreateCommandObj();
Assert.That( () => command.DoWork(),
Throws.TypeOf<ArgumentException>()
.And.Message.Equals("MyMessage"));
这种方法允许我检查抛出异常的属性。我可以在Assert中添加任意数量的And或Or。
感谢大家的建议。
答案 1 :(得分:1)
您在方法上使用[ExpectedException]
属性测试异常。 e.g。
[Test]
[ExpectedException(typeof(InvalidOperationException))]
public void Test_SomeMethod()
{
something.SomeMehthod();
}
您可以在ExpectedException属性的构造函数中设置预期异常的属性。
修改的 您还可以指定测试属性,如下所示:
[Test]
[ExpectedException(ExpectedException = typeof(InvalidOperationException), ExpectedMessage = "Somethings not right")]
public void Test_SomeMethond()
{
something.SomeMehthod();
}
答案 2 :(得分:0)
尝试&amp;&amp; - 逻辑和与按位和
修改强>:
我认为你正在寻找Assert.Throws如果你正在使用约束接口。不确定如何断言消息。我认为旧的风格对于你想要完成的事情更清楚:
try
{
command.DoWork();
Assert.Fail("ArgumentException Expected");
}
catch (ArgumentException e)
{
Assert.AreEqual("Expected Message", e.Message);
}
答案 3 :(得分:0)
您也可以这样做:
var exception = Assert.Throws<ArgumentException>(() => {
command.DoWork();
});
Assert.AreEqual("myMessage", exception.Message);