gpt4 book ai didi

c# - NCover:从覆盖范围中排除不可执行的代码行

转载 作者:行者123 更新时间:2023-11-30 17:59:59 24 4
gpt4 key购买 nike

以下代码中的 switch 语句有一个编译器需要的 default 子句和一个很好的保护措施,但它永远不会被执行。在为其他所有内容编写测试之后,我无法(或应该)测试那一行。我不在乎我没有用测试覆盖该行,但我的 TestDriven.net NCover 代码覆盖率报告确实显示了未测试的行,这导致类覆盖率下降到 86%。有没有办法让 NCover 只排除这一行?

public static class OperandTypeExtensions
{
public static string ToShortName(this OperandType type)
{
#region Contract
Contract.Requires<InvalidEnumArgumentException>(Enum.IsDefined(typeof(OperandType), type));
#endregion

switch (type)
{
case OperandType.None: return "<none>";
case OperandType.Int32: return "i32";
case OperandType.Int64: return "i64";
default:
throw new NotSupportedException();
}
}
}

我的问题类似于this question ,但没有一个答案对我的具体情况有帮助。

最佳答案

您可以通过将 OperandType 枚举中不存在的整数值转换为 OperandType 来练习它:

Assert.Throws<InvalidEnumArgumentException>(delegate { ((OperandType)Int32.MaxValue).ToShortName(); } );

顺便说一句,我认为 86% 的覆盖率没有什么不好

更新:在这里使用 Contract 没有任何好处。如果您的方法不支持该值,您无论如何都会得到异常。

public static class OperandTypeExtensions
{
public static string ToShortName(this OperandType type)
{
switch (type)
{
case OperandType.None: return "<none>";
case OperandType.Int32: return "i32";
case OperandType.Int64: return "i64";
default:
throw new NotSupportedException();
}
}
}

你应该在这里有default选项,因为如果新值将被添加到OperandType枚举,你的Contract将允许该值,但 switch 将不支持新选项。

更新 2:如果您确实需要 100% 的覆盖率和此方法的 Contract,请使用 OperandType.None 作为默认选项:

public static class OperandTypeExtensions
{
public static string ToShortName(this OperandType type)
{
Contract.Requires<InvalidEnumArgumentException>(Enum.IsDefined(typeof(OperandType), type));

switch (type)
{
case OperandType.Int32: return "i32";
case OperandType.Int64: return "i64";
default:
return "<none>";
}
}
}

并添加到您关于枚举的测试断言中:

CollectionAssert.AreEquivalent(Enum.GetValues(typeof(OperandType)), 
new OperandType[] { OperandType.Int32,
OperandType.Int64,
OperandType.None });

关于c# - NCover:从覆盖范围中排除不可执行的代码行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10603725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com