使用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);
}
我的方法是正确的,还是“正常方式”是正确的?我在写冗余代码吗?
答案 0 :(得分:5)
我说这是多余的,是的。如果异常是意外结果,则测试失败。测试框架是否以相同的方式处理是否通过抛出异常或失败Assert而失败。基本上,失败的测试是失败的测试。
答案 1 :(得分:2)
如果测试方法抛出异常,测试框架将已经未通过测试。您正在添加额外的工作而没有附加价值。
答案 2 :(得分:2)
您正在编写冗余代码。 Test方法已经捕获异常并且将使测试方法失败。
答案 3 :(得分:1)
如果您预计会遇到异常,请使用以下属性:
[TestMethod]
[ExpectedException(typeof(//Here the exception you expect))] <------------
public void TestSomething()
{
//Your test code
}
这意味着如果测试抛出此异常,将通过测试返回。
如果您不去测试异常,那么请避免在测试中使用try / catch块。你会注意到出了问题,因为测试会失败;)
我希望这会有所帮助
答案 4 :(得分:0)
参见本教程;有一个使用[expectedException()]属性的示例单元测试: [ExpectedException单元测试教程] [1]
[1]: http://msdn.microsoft.com/en-us/library/hh694602%28v=vs.110%29.aspx#BKMK_Writing_your_tests