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

时间:2011-06-21 06:45:51

标签: c# testing nunit code-coverage ncover

我在NUint附近愚弄,希望找到一种方法来实现哪一行代码在哪个测试中通过。

想象一下,我有一个方法,我有3个测试。有没有办法找出哪个测试检查哪行代码?

使用过NCover后,我知道你可以找出哪些线路已经过测试,哪些没有。但是,您实际上无法查看哪个单元检查了该代码。

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

8 个答案:

答案 0 :(得分:3)

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

此处提供其他信息: http://blogs.jetbrains.com/dotnet/2010/07/show-covering-test-with-dotcover/

答案 1 :(得分:1)

嗨,因为大多数人已经做出回应,目前使用大多数覆盖工具的唯一方法是单独运行每个测试,然后查看每个测试的覆盖范围。

然而,使用OpenCover是可能的,但需要一些努力。如果您按照测试和测试的顺序捕获并存储测试和目标中的所有序列点,然后在测试的基础上分析这些结果,这是OpenCover的原始目标之一 - https://github.com/sawilde/opencover/wiki。目前,OpenCover只汇总这些结果,然后将访问数据抛出,但可以存储它们。当然,如果存在任何并行运行测试,您必须知道它们。数据量可能令人生畏,并且还有其尚未实施的原因。

答案 2 :(得分:0)

您可以调试测试。如果您使用的是NUnit,则可以将该过程附加到VS.

答案 3 :(得分:0)

您正在寻找的术语是“代码覆盖率”。

我没有任何使用NUnit的经验,但似乎有一个codeplex项目使这个可用于NUnit:http://codecoveragerunner.codeplex.com/

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

当其他测试抛出异常时,您可以禁用异常中断选项:

  • 在visual studio的菜单中转到“Debug” - > “异常”并取消选中异常中断。那么你不必在每个例外都停下来。

答案 4 :(得分:0)

NCover是一种可用于计算单位测试覆盖率的工具。见NCover.com。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

我不知道任何可以直接达到你想要的东西的东西。我最近在automated fault localization做了一个项目,我们需要这个功能,我们提出的唯一解决方案就是推出我们自己的测试运行器,它也收集了每种方法的覆盖率信息。

使用Visual Studio 2010(Premium和Ultimate)可能有间接的方法来实现这一点,它引入了Test Impact Analyzer。这允许您确定哪些测试受到影响的源代码更改。但是,这仅适用于MSTest。您可以使用the technique in this blog post允许您的NUnit测试在MSTest下运行。

答案 7 :(得分:0)

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

您的组织方式可能取决于具体的测试覆盖率工具,以及您选择如何运行测试。

对于我们的Test Coverage tools,测试覆盖率检测步骤会为您的软件添加一个明确的“TestCoverageDump”方法。通常,对应用此方法的调用将插入到应用程序的“main”程序中,以便在退出时,您可以获得已运行的任何测试的测试覆盖率数据。

对于您的任务,您希望修改单元测试运行代码,以便在每次测试后进行显式调用 “TestCoverageDump”后跟“TestCoverageReset”(也插入),以便每个测试都有自己的矢量。您如何选择将测试名称与矢量相关联 在你的控制之下,以对源代码中提供的“TestCoverageDump”代码进行一点调整为代价。

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

使用此测试覆盖率数据还可以确定需要再次运行的测试。如果您修改代码并重新运行仪器,它将告诉您需要根据向量先前覆盖的修改代码再次运行哪些测试覆盖率向量(例如,哪些测试)。