C# 如何发现哪个测试单元检查哪些代码行?

C# 如何发现哪个测试单元检查哪些代码行?,c#,testing,nunit,code-coverage,ncover,C#,Testing,Nunit,Code Coverage,Ncover,我一直在愚弄NUint,希望找到一种方法来实现哪行代码通过了哪项测试 假设我有一个方法,我有3个测试。有没有办法找出哪个测试检查哪行代码 使用NCover后,我知道您可以找出哪些线路已经过测试,哪些线路没有。然而,您真的看不到哪个单元检查了代码 它在处理大量测试时非常有用…您可以调试测试。如果您使用NUnit,您可以将流程附加到您的VS中。您要查找的术语是“代码覆盖率” 我没有任何使用NUnit的经验,但似乎有一个codeplex项目使NUnit可以使用它: 如果您想查看哪个测试正在测试哪一行代

我一直在愚弄NUint,希望找到一种方法来实现哪行代码通过了哪项测试

假设我有一个方法,我有3个测试。有没有办法找出哪个测试检查哪行代码

使用NCover后,我知道您可以找出哪些线路已经过测试,哪些线路没有。然而,您真的看不到哪个单元检查了代码


它在处理大量测试时非常有用…

您可以调试测试。如果您使用NUnit,您可以将流程附加到您的VS中。

您要查找的术语是“代码覆盖率”

我没有任何使用NUnit的经验,但似乎有一个codeplex项目使NUnit可以使用它:


如果您想查看哪个测试正在测试哪一行代码,可以在代码行上设置断点并调试测试?当你点击断点时,检查哪个测试是正确的

当其他测试引发异常时,可以禁用“异常中断”选项:


  • 在VisualStudio的菜单中,转到“调试”->“异常”,然后取消选中“异常中断”。那你就不必每次都停下来

NCover是一种可以用来计算单元测试覆盖率的工具。请参阅NCover.com。

最简单的方法是下载并安装一个运行单元测试的个人版本,并且可以选择使用NCover运行和报告代码覆盖率。请注意,较新的NCover版本是商业版,但TD.NET中包含的版本稍旧一些,但可以免费使用。

我不知道有什么能直接满足您的需求。我最近做了一个项目,我们在哪里需要这个确切的功能,我们提出的唯一解决方案是推出我们自己的测试运行程序,它还收集了每个方法的覆盖率信息

使用VisualStudio2010(Premium and Ultimate)可以间接实现这一点,它引入了。这允许您确定哪些测试受源代码更改的影响。但是,这仅适用于MSTest。您可以使用允许NUnit测试在MSTest下运行

简单的答案是,“自行运行每个测试,并为该测试收集测试覆盖率数据”

如何组织可能取决于特定的测试覆盖率工具,以及如何选择运行测试

对于我们的测试,有一个显式的“TestCoverageDump”方法通过测试覆盖率检测步骤添加到您的软件中。通常,对该方法的调用会插入到应用程序的“main”程序中,这样当它退出时,您就可以获得运行的任何测试的测试覆盖率数据

对于您的任务,您希望修改单元测试运行代码,以便在每次测试之后对 “TestCoverageDump”后跟“TestCoverageSet”(也插入),这样每个测试都会获得自己的向量。选择将测试名称与向量关联的方式完全不同 在您的控制下,只需对源代码中提供的“TestCoverageDump”代码稍作调整

我们的测试覆盖率显示工具可以轻松地组合所有单个向量,为您提供整体视图。或者,您可以查看任何特定向量的覆盖率。显示工具也将显示 让您比较不同测试的覆盖率(它们在哪里相交?一个测试是什么,另一个没有?)


拥有此每个测试覆盖率数据还可以让您确定需要再次运行哪些测试。如果修改代码并重新运行instrumenter,它将告诉您哪些测试覆盖向量(例如,哪些测试)需要根据向量之前包含的修改过的代码再次运行。

您好,因为大多数人都有回应。目前使用大多数覆盖工具实现这一点的唯一方法是单独运行每个测试,然后查看每个测试的覆盖率

然而,这是可能的,但需要一点努力,使用OpenCover。如果您按照测试和目标到达的顺序捕获并存储测试和目标的所有序列点,然后逐个测试分析这些结果,这就是OpenCover的最初目标之一。目前OpenCover只是聚合这些结果,然后丢弃访问数据,但它们可以被存储。当然,如果存在任何并行运行的测试,您必须了解它们。数据量可能会令人望而生畏,这也是它尚未实施的原因之一

可以帮助您获取所需信息。 它与ReSharper单元测试运行程序集成,并收集每个测试数据。 您可以看到每个特定测试包含哪些代码(在VS中有相应的突出显示)。 更有趣的是,对于每一段代码,您都可以得到覆盖它的测试列表,并且可以轻松地重新运行它们

其他信息可在此处获得:

如果您的业务层中存在许多抛出异常,您不能这样做。因为你几乎永远都达不到那个密码!除非您对所有抛出的异常进行注释,否则代码覆盖率只会告诉您哪一行已经过测试!不是哪个测试单元检查了itok然后我没有正确理解你的问题。但为什么用哪种测试来测试哪条线真的很重要呢?我想您每次都想运行每个测试。单元测试应该很快,否则人们很快就会停止使用。老实说,有一段代码我无法找到它在哪里被测试过。还有一段完全相同的代码没有经过测试。所以我试图找到单元测试,它是1000个其他测试中的一个。只要有很多抛出异常,我就不能使用debug,除非我对所有异常都进行注释,这不是在代码行上设置断点并调试测试?当您点击断点时,检查哪个测试正在运行?在visual studio的菜单中,转到“调试”->“异常”,然后取消选中br