在单元测试中使用try/catch块
本文关键字:catch try 单元测试 | 更新日期: 2023-09-27 17:50:36
使用VS的测试框架,我现在这样写我的测试:
[TestMethod]
public void TestSomething()
{
try
{
var someTestValue = _someTestClass.SomeTestMethod();
Assert.IsNotNull(someTestValue);
}
catch (Exception e)
{
Assert.Fail(e.Message);
}
}
我的逻辑是,如果在SomeTestMethod()
中抛出异常,我将立即终止通过Assert.Fail(e.Message)
显示异常消息的测试。
做事的"正常方式"是:
[TestMethod]
public void TestSomething()
{
var someTestValue = _someTestClass.SomeTestMethod();
Assert.IsNotNull(someTestValue);
}
我的方法是正确的,还是"正常方式"是正确的?我是不是写了多余的代码?
我想说这是多余的,是的。如果异常是意外结果,则测试失败。无论是抛出异常还是Assert失败,测试框架都以相同的方式处理它。基本上,失败的测试就是失败的测试。
如果测试方法抛出异常,测试框架将已经测试失败。
你在写多余的代码。Test方法已经捕获异常,并且将使测试方法失败。
如果你期待一些异常,使用这个属性:
[TestMethod]
[ExpectedException(typeof(//Here the exception you expect))] <------------
public void TestSomething()
{
//Your test code
}
这意味着如果测试抛出此异常,将返回通过测试。
如果你不去测试异常,那么避免在测试中使用try/catch块。您将注意到有些地方出错了,因为测试将失败;)
希望对大家有所帮助
查看本教程;这里有一个使用[expectedException()]属性的单元测试示例:ExpectedException单元测试教程[1]
[1]: http://msdn.microsoft.com/en-us/library/hh694602%28v=vs.110%29.aspx#BKMK_Writing_your_tests