Ric*_*ard 11 .net c# unit-testing exception
我正在为ac#class编写单元测试,我的一个测试应该导致该方法在添加数据时抛出异常.我如何使用单元测试来确认抛出了异常?
Jon*_*eet 22
这取决于您使用的单元测试框架.在所有情况下,您可以执行以下操作:
[Test]
public void MakeItGoBang()
{
Foo foo = new Foo();
try
{
foo.Bang();
Assert.Fail("Expected exception");
}
catch (BangException)
{
// Expected
}
}
Run Code Online (Sandbox Code Playgroud)
在某些框架中,您可以添加一个属性来测试方法以表示预期的异常,或者可能有一个方法,例如:
[Test]
public void MakeItGoBang()
{
Foo foo = new Foo();
Assert.Throws<BangException>(() => foo.Bang());
}
Run Code Online (Sandbox Code Playgroud)
像这样限制范围更好,就像你将它应用于整个测试一样,即使错误的行抛出异常,测试也可以通过.
aba*_*hev 11
[ExpectedException(typeof(System.Exception))]
Run Code Online (Sandbox Code Playgroud)
用于Visual Studio单元测试框架.
请参阅MSDN:
如果抛出预期的异常,测试方法将通过.
如果抛出的异常继承自预期的异常,则测试将失败.
如果你想遵循 3A 模式(安排、行动、断言),你可以这样做,无论测试框架如何:
[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"));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17780 次 |
| 最近记录: |