在单元测试中使用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);
}

我的方法是正确的,还是"正常方式"是正确的?我是不是写了多余的代码?

在单元测试中使用try/catch块

我想说这是多余的,是的。如果异常是意外结果,则测试失败。无论是抛出异常还是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