我是代码覆盖的新手,我正在尝试让我的单元测试覆盖我的代码的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块中的代码?
答案 0 :(得分:2)
提高覆盖率是一个很好的目标。不要太专注于100%的数字:它可能会非常误导。更多的覆盖率优于更少,但即使在100%,您也可能缺少代码的许多方面(有关Python中的示例,请参阅http://nedbatchelder.com/blog/200710/flaws_in_coverage_measurement.html)。最后5%的报道可能不会像你想的那样告诉你。
至于您的异常,您需要一种方法来强制从您的某个方法抛出异常。执行此操作的常用方法是模拟实现,以便您可以在测试期间确定子对象实际执行的操作,而不必依赖于特定实现。
答案 1 :(得分:2)
有可能,这是可行的。这也很难实现,并不是每个人都确信这些好处超过了成本。
关于实现您的具体目标 - 请查看ExpectedExceptionAttribute
,并在测试设置中查看抛出这些异常的对象。