【问题标题】:How to cover exceptions in Visual Studio Code Coverage如何在 Visual Studio 代码覆盖率中覆盖异常
【发布时间】:2011-03-18 02:26:45
【问题描述】:

我是代码覆盖的新手,我正在尝试让我的单元测试覆盖 %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 块中的代码?

【问题讨论】:

  • 你打算对mtException 做点什么吗?仅仅创建一个异常不会导致它被抛出、记录或其他任何事情。
  • 100% 的代码覆盖率虽然是一个有价值的目标,但随着测试代码的数量和目标流失率越来越接近(例如大约 80-90%),很快就会适得其反收益递减。在某些时候,你不得不说足够好就是足够好。 TMMV
  • @John Saunders:您假设(也许是正确的)mtException 是 Exception 的一个实例。
  • mtException 是我正在使用的一个框架,它将异常记录到 EventLog 中。不幸的是,到目前为止,我还没有一个好的测试方法。有任何想法吗?它有助于不抛出异常,而是记录它们以创造更好的用户体验。
  • @sbenderli:这是非常糟糕的做法,我试图让您怀疑您的真实代码实际上引发了该异常。假装没有发生异常是搞砸系统的好方法。您确定所有调用者都测试返回 false 的方法吗?让一个人错过那个检查,你会希望你让异常传播。此外,使用显式的“LogException”方法会比将日志记录功能放入构造您从未使用过的实例的构造函数中做得更好。

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


【解决方案1】:

这是可能的,这是可行的。这也很难实现,并不是每个人都确信收益大于成本。

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

【讨论】:

  • 谢谢!我将更多地研究使用 ExpectedExceptionAttribute。
【解决方案2】:

提高您的覆盖率是一个不错的目标。不要过于关注 100% 的数字:这可能会产生很大的误导。更多的覆盖率比更少的覆盖率要好,但即使是 100%,您也可能会遗漏代码的许多方面(请参阅http://nedbatchelder.com/blog/200710/flaws_in_coverage_measurement.html 以获取 Python 中的示例)。最后 5% 的覆盖率可能无法如您所愿。

至于您的异常,您需要一种方法来强制从您的方法中抛出异常。执行此操作的一种常见方法是模拟实现,以便您可以决定子对象在测试期间实际执行的操作,而无需绑定到特定的实现。

【讨论】:

  • ++ 同意。盲目追求 100% 的覆盖率会导致手掌多毛和对乙酰氨基酚的习惯。 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 2016-09-07
  • 2011-05-27
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多