如何解决单元测试如何确认已引发异常
| 我正在为c#类编写单元测试,我的测试之一应在添加数据时使方法引发异常。如何使用单元测试来确认已引发异常?解决方法
这取决于您使用的单元测试框架。在所有情况下,您都可以执行以下操作:
[Test]
public void MakeItGoBang()
{
Foo foo = new Foo();
try
{
foo.Bang();
Assert.Fail(\"Expected exception\");
}
catch (BangException)
{
// Expected
}
}
在某些框架中,您可以将属性添加到测试方法中以表达预期的异常,或者可能存在一种方法,例如:
[Test]
public void MakeItGoBang()
{
Foo foo = new Foo();
Assert.Throws<BangException>(() => foo.Bang());
}
最好这样限制范围,就像将它应用于整个测试一样,即使错误的行引发了异常,该测试也可以通过。
,[ExpectedException(typeof(System.Exception))]
用于Visual Studio单元测试框架。
参见MSDN:
如果引发了预期的异常,则测试方法将通过。
如果抛出的异常继承自预期的异常,则测试将失败。
,如果要遵循三重A模式(安排,执行,声明),则可以使用此模式,而不考虑测试框架:
[Test]
public void MyMethod_DodgyStuffDone_ThrowsRulesException() {
// arrange
var myObject = CreateObject();
Exception caughtException = null;
// act
try {
myObject.DoDodgyStuff();
}
catch (Exception ex) {
caughtException = ex;
}
// assert
Assert.That(caughtException,Is.Not.Null);
Assert.That(caughtException,Is.TypeOf<RulesException>());
Assert.That(caughtException.Message,Is.EqualTo(\"My Error Message\"));
}
,如果您使用的是Nunit,则可以使用
[ExpectedException( \"System.ArgumentException\" ) )]
,您可以使用Verify()方法进行单元测试,并比较返回类型中的异常消息。
InterfaceMockObject.Verify(i =>i.Method(It.IsAny<>())),\"Your received Exception Message\");
您需要在It.IsAny <>块中编写一些类名或数据类型
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。