如何在Visual Studio代码覆盖范围中涵盖异常

时间:2010-07-19 19:49:49

标签: exception visual-studio-2010 code-coverage

我是代码覆盖的新手,我正在尝试让我的单元测试覆盖我的代码的100%。

我的第一个问题是,这可能/可行吗?

我的第二个更具体的问题是,我有以下方法:

/// <summary>
/// Clears frames, control groups, display groups
/// </summary>
public bool Clear()
{
    try
    {
        this.Frames.Clear();
        this.ControlGroups.Clear();
        this.DisplayGroups.Clear();
        return true;
    }
    catch (Exception ex)
    {
        Milltown.MTCore.mtException mtEx = new Milltown.MTCore.mtException((int)PFExceptions.Exception_Hidden_FuctionLevel, ex,
        PFCommonVariables.ApplicationPlatform, PFCommonVariables.ApplicationDataSource, "PFSystem:Clear");
        return false;
    }

}

我对此方法的单元测试是:

//System Clear Test
Assert.IsTrue(MySystem.Clear());
Assert.AreEqual(0,MySystem.Frames.Count);
Assert.AreEqual(0,MySystem.ControlGroups.Count);
Assert.AreEqual(0, MySystem.DisplayGroups.Count);

代码覆盖率显示我覆盖了try块内的行,但没有覆盖catch块。如何覆盖catch块中的代码?

2 个答案:

答案 0 :(得分:2)

提高覆盖率是一个很好的目标。不要太专注于100%的数字:它可能会非常误导。更多的覆盖率优于更少,但即使在100%,您也可能缺少代码的许多方面(有关Python中的示例,请参阅http://nedbatchelder.com/blog/200710/flaws_in_coverage_measurement.html)。最后5%的报道可能不会像你想的那样告诉你。

至于您的异常,您需要一种方法来强制从您的某个方法抛出异常。执行此操作的常用方法是模拟实现,以便您可以在测试期间确定子对象实际执行的操作,而不必依赖于特定实现。

答案 1 :(得分:2)

有可能,这是可行的。这也很难实现,并不是每个人都确信这些好处超过了成本。

关于实现您的具体目标 - 请查看ExpectedExceptionAttribute,并在测试设置中查看抛出这些异常的对象。