C# 更好的不正确声明覆盖范围的例子是什么?

C# 更好的不正确声明覆盖范围的例子是什么?,c#,code-coverage,C#,Code Coverage,我试图证明100%的声明覆盖率在证明和测试方面并不意味着什么。我想不出任何简单的例子,这是我最好的尝试: TestObject t = null; if (Console.ReadLine() == "A") { t = new TestObject(); t.Value = 5; } Console.WriteLine(t.Valu

我试图证明100%的声明覆盖率在证明和测试方面并不意味着什么。我想不出任何简单的例子,这是我最好的尝试:

TestObject t = null;

            if (Console.ReadLine() == "A")
            {
                t = new TestObject();
                t.Value = 5;

            }
            Console.WriteLine(t.Value);  //exception only when the IF statement was not run as the variable remains null.

此外,当用户按“A”时,报表覆盖率为100%。但是,当按下任何其他按钮时,会出现异常。

我认为您的断言不正确。使用100%的语句覆盖率,您可以确保能够设计测试用例来验证所有代码。您似乎混淆了这样一个想法:因为您能够使用单元测试命中代码中的每一行,所以它正在使用一个测试用例进行完全测试。

我想说,您的示例就是用于此目的的好例子

  • 您只有一个测试用例,就拥有完整(100%)的语句覆盖率。这只虫子没有被发现
  • 从覆盖率的角度来看,有两个分支(如果计算结果为真或假),只有一个分支被覆盖(50%)。如果分支覆盖率达到100%,则会暴露错误。这称为分支覆盖

    • 来自Bullseye测试覆盖工具的Steve Cornnett有一篇很棒的文章,名为“


      <>你会发现为什么声明覆盖被认为是最弱的覆盖形式。A/P>异常的发生是显而易见的,因为你没有分配任何实例给它。当然,没有更简单的方法来显示100%的语句覆盖是不够的吗?实例是在IF.中创建的,这就是本例的要点。如果IF为真,它会工作,如果IF为假,它会崩溃。@mihirj我不同意,我认为如果你不太注意,这很容易被忽略。尽管在VisualStudio的默认UI中,它会得到一条漂亮的绿色下划线警告您。因此,当您不确定是否将内存分配给对象时,建议使用空检查。因此,语句覆盖率不是证明完美测试的充分标准。分支机构覆盖较好;但你也可以找到一些反例,在这些反例中问题并没有暴露出来。因此,提出了其他覆盖标准,例如MC/DC、“路径覆盖”等。文献中定义了大约150种“覆盖”,每种都有助于确保不会遗漏某些类型的错误。既然你不能让它完美无瑕,你必须做的就是从中选择一个,并和疣子一起生活。通常选择分支覆盖,因为通常可以获得工具;事实上,它是正确的——语句覆盖率仅仅意味着所有语句都被执行。这可能发生在这里。但只有50%的决策覆盖率才是问题所在。