Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ncrunch 从单元测试中排除私有方法_Ncrunch - Fatal编程技术网

Ncrunch 从单元测试中排除私有方法

Ncrunch 从单元测试中排除私有方法,ncrunch,Ncrunch,有没有办法从测试中排除私有方法,这样就不会为私有方法生成黑条,并且它们的代码覆盖率不会影响被测试类的代码覆盖率?要从代码覆盖率中排除任何方法,可以使用。我相信NCrunch将尊重这一属性 您还可以使用注释将代码从代码覆盖范围中排除。详细说明。工作原理: NCrunch识别3种不同类型的覆盖率抑制注释: //ncrunch:no coverage start-用代码覆盖率抑制标记代码块的开始 //ncrunch:no coverage end-用代码覆盖率抑制标记代码块的结束 //ncrunch

有没有办法从测试中排除私有方法,这样就不会为私有方法生成黑条,并且它们的代码覆盖率不会影响被测试类的代码覆盖率?

要从代码覆盖率中排除任何方法,可以使用。我相信NCrunch将尊重这一属性

您还可以使用注释将代码从代码覆盖范围中排除。详细说明。工作原理:

NCrunch识别3种不同类型的覆盖率抑制注释:

  • //ncrunch:no coverage start-用代码覆盖率抑制标记代码块的开始
  • //ncrunch:no coverage end-用代码覆盖率抑制标记代码块的结束
  • //ncrunch:no coverage-标记用于代码覆盖率抑制的单个代码行(放在该行的末尾)
使用C#以外的语言时,只需将“/”注释语法替换为特定于您的语言的语法即可

我想问一下,为什么要将私有方法排除在代码覆盖率计算之外?当然,它们是类中需要测试的方法吗

编辑


仅仅因为你的方法是私有的,并不意味着你的测试不应该涵盖它们。您的测试应该测试您的类的外部行为(当我给出这些输入时,我得到这些输出)或者您的类与其依赖项的内部交互(当我用这些值调用此方法时,我的类调用其依赖对象的此方法)。类上的某些方法是私有的这一事实与实现细节无关。如果您的测试调用了您的类,但无法使用您的私有方法,那么这很可能是您的类存在其他问题的一个指示器,就像它做得太多一样


您是否有想要从代码覆盖范围中排除的私有方法的真实示例,也许我们可以帮助您看看是否还有其他问题。

好吧,因为私有方法在我的测试项目中不可访问。@lejon我已经编辑了我的答案,以便根据您的评论添加更多细节。查看测试中未包含的实际代码可能很有用。可能私有方法具有db依赖性等。。在这种情况下,即使您将您的方法公开为虚拟并覆盖它,nCrunch仍然抱怨代码未涵盖。“类上的某些方法是私有的这一事实与实现细节无关。”-说得很好。它的最佳实践是“测试接口,而不是实现”,私有方法将通过调用公共方法来覆盖,或者根本不调用