【问题标题】:.NET - determining which test cases covered a method.NET - 确定哪些测试用例涵盖了一个方法
【发布时间】:2011-12-07 13:53:46
【问题描述】:

我想知道涵盖特定方法的测试。但是,NCover 不提供此信息。我不想使用 VSTS,因为我的代码不在 TFS 中。 .NET 中是否有任何方法/工具可以做到这一点?

【问题讨论】:

    标签: .net code-coverage ncover


    【解决方案1】:

    从根本上说,您需要为每个测试运行一次测试覆盖率工具,为该测试生成一个覆盖率向量。如果您有数百个测试,您可以分别收集每个测试的覆盖率。

    如果覆盖向量 N 覆盖了一个方法,则测试 N 导致了该覆盖。

    我不知道 NCover 是否/如何 NCover 可以交叉引用回对应于方法源代码的行范围。

    对于我们的C# Test Coverage Tool,instrumenter 工具会为每个覆盖测试点生成行号范围,并且在每个方法的开头插入一个测试点。因此,如果您知道文件中方法的行号,则可以从技术上定位入口覆盖点,从而确定构成该方法的行范围,从而确定该方法中的所有测试覆盖点。使用这样的列表,可以直接计算测试覆盖向量是否达到了这些点。因此,我们的工具具有提供此数据所需的信息,尽管它没有得到很好的记录。你可以 向我们索取更多文件或帮助。

    【讨论】:

    • Downvoter:这个答案的哪一部分没有解决 OP 的问题?它准确地描述了需要什么,因此 OP 知道要寻找什么,并在他找不到的情况下提供帮助。嘘。
    • 是的,我愿意。人们对我倾倒了很多仇恨,因为我提供了问题的解决方案,这不是免费的。 (对于我提供的许多解决方案,没有任何免费的替代方案,所以我得出结论,仇恨者不希望以任何代价得到答案)。太棒了...我怀疑他们中的大多数人都在为雇主提供金钱解决方案,而且他们似乎并不反对自己。
    • 题外话:不是很奇怪,即使我做了一个占用空间的开源产品版本,我还是很乐意提及付费替代品。最后我做我的产品,这样开源项目就可以有一些免费的工具,这样知识就不会丢失给开源社区。​​span>
    【解决方案2】:

    dotCover 我相信在 UI 中提供了这种支持,但我不确定这些信息是否可以从构建机器获得。

    OpenCover 的其中一个分支正在进行中 - 这是该项目的 original aims 之一,并推动了 OpenCover 的设计通过一次测试来实现这一目标 - 敬请期待。 .

    最后,正如 Ira 提到的,您可以单独运行测试并从使用 NUnit/MSTest 执行的单个测试(插入选择的测试工具),但是您还将获得在任何设置/拆卸操作中发生的任何事情的覆盖范围。

    【讨论】:

    • 您需要的不仅仅是测试覆盖向量。您需要以某种方式识别方法的主体是否被向量覆盖,方法是(可能)通过覆盖数据的目视检查以外的方式。
    • Ira - 我假设这就是你所提到的,NCover 等人都有某种可视化的代码覆盖率,可用于可视化“单一”测试的覆盖率。将其汇总到单个查看器中是“当前”读者的练习。
    • OP 要求提供一种方法,测试涵盖了它。大概他有一个(完全限定的)方法名称,并且想要调用一个返回整数测试编号列表的函数。查看一组像素并不能回答这个问题。
    • 通过查看器进行的可视化不一定是一组像素。 XYZCover 将访问计数报告到一个序列点,因此可以找到访问计数大于 0 的所有点,然后将其转换为报告。序列点应该能够识别与序列点关联的方法和代码行。它仍然是读者的练习,但需要一些数据挖掘,但是大多数人 IME 只在 Visual Studio 中真正想要这种报告。 dotCover 可以可视化测试及其自身的覆盖率,因此也可以反之
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2011-03-12
    • 2011-08-22
    • 2016-06-30
    • 1970-01-01
    • 2015-05-06
    • 2020-09-13
    相关资源
    最近更新 更多