我想为try catch block(C#)编写单元测试。
Public ActionResult Index()
{
try
{
-------------
}
catch(Exception ex)
{
throw;
}
}
正如你可以看到我在控制器中使用我的索引方法中的try-catch块。虽然单元测试这个方法我也想覆盖try-catch块。在catch块中我抛出异常。但是我对此没有任何想法。谁能建议我处理try-catch块的最佳方法?仅供参考,我在这里没有指定任何异常类型,它会引发任何异常。
答案 0 :(得分:5)
检查作为框架一部分的ExpectedExceptionAttribute。
从链接中取得的一个例子:
[TestMethod()]
[ExpectedException(typeof(System.DivideByZeroException))]
public void DivideTest()
{
DivisionClass target = new DivisionClass();
int numerator = 4;
int denominator = 0;
int actual;
actual = target.Divide(numerator, denominator);
}
在这里,你正在进行0除法,你知道它会失败并抛出异常。 如果你在代码上捕获了这个异常,那么测试就会失败,因为没有异常会被抛出。
答案 1 :(得分:3)
今天你的阻止只是重新抛出异常。没有真正的业务逻辑,如更改状态或添加错误代码或任何其他需要测试的内容。我想只是测试" try-catch块"和"扔"平台附带的功能是一种过度的功能。
答案 2 :(得分:3)
这取决于所使用的单元测试框架。我所使用的框架提供了一种机制,用于验证被测系统是否抛出了异常。以下是一些框架和相关的异常测试功能。
Microsoft单元测试
ExpectedExceptionAttributeClass
[TestMethod]
[ExpectedException(typeof(Exception))]
public void Controller_Index_ThrowsException()
{
var sut = new HomeController();
sut.Index();
}
xUnit.net
How do I use xUnit.net?
看看如果我预期会出现异常怎么办?部分。
[Fact]
public void Controller_Index_ThrowsException()
{
var sut = new HomeController();
Assert.Throws<Exception>(() => sut.Index());
}
[Fact]
public void Controller_Index_DoesNotThrowException()
{
var sut = new HomeController();
Assert.DoesNotThrow(() => sut.Index());
}
此外,xUnit.net提供了一种非类型断言方法,用于测试抛出的异常。