【问题标题】:What constitutes full code coverage when I invoke dotCover from an MSTest build step in TeamCity?当我从 TeamCity 中的 MSTest 构建步骤调用 dotCover 时,什么构成完整的代码覆盖?
【发布时间】:2012-11-16 08:14:08
【问题描述】:

当我从 TeamCity 中的 MSTest 构建步骤调用 dotCover 时,什么被认为是 100%?是 100% 的所有编译代码吗?它是测试所涉及的所有程序集的所有代码吗?是不是所有测试都涉及到的类?

当我从运行 My.Tests.dll 的 TeamCity MSTest 构建步骤调用 dotCover 时,正在跟踪哪些代码行?

【问题讨论】:

    标签: continuous-integration teamcity qa dotcover


    【解决方案1】:

    dotCover 仅提供语句级覆盖率报告,而其他工具(如 NCover)也包括函数和分支覆盖率。

    通过 TeamCity MSTest 构建步骤,您可以在“过滤器”字段中指定您希望报告覆盖范围的程序集。这允许您只为 .Tests 模式指定一个排除项,或者只包含一个程序集。有关详细信息,请参阅 TeamCity 文档: http://confluence.jetbrains.net/display/TCD7/JetBrains+dotCover

    我相信,如果您不指定任何过滤器,则加载到 CLR 中的所有程序集中的所有代码都将包括在内(您必须从您调用的代码中加载程序集,因此可能不包括某些程序集,这只是 CLR 的延迟加载)。这是因为 dotCover 之类的工具使用 CLR 分析 API,并且不会预先检测您的代码。请注意,dotCover 将从 GAC 中排除程序集。

    【讨论】:

    • 在单元测试中使用该程序集中的代码(在 VS 中引用是不够的)或在单元测试中显式执行 Assembly.Load("MyAssembly")
    【解决方案2】:

    不确定我是否完全理解您的问题,但无论如何都会试一试。 据我了解,100% 的覆盖率意味着项目中的每一行代码都由您的测试用例执行。基本上,这意味着您已确保控制流经项目中的每一行代码。

    总的来说,我从未见过 100% 的覆盖率,因为很难测试每个代码路径。例如,考虑由您的代码处理的不同类型的异常,您如何通过某些测试用例对每个异常执行 catch 块?您需要以某种方式模拟异常,这并不容易。

    【讨论】:

    • 我知道这一点,但构成 100% 的实际代码世界是什么?如果我有 x% 的覆盖率,x% OF WHAT?
    • 代码总行数的 x%。假设你有 100 行代码,那么 60% 意味着 60 行代码被覆盖,而 40 行没有。
    • 我的问题是如何确定我有100行代码。
    • 在代码覆盖运行之前,有一个检测阶段,覆盖工具将计算所有代码行,然后对代码进行存根,以便跟踪对每一行代码的访问。然后在报告阶段,代码覆盖率工具将生成关于总共有多少行代码以及覆盖了多少行的统计信息。如果你想了解更多关于仪器的信息,这里有一些很好的链接blogs.msdn.com/b/phuene/archive/2007/05/03/…doc.froglogic.com/squish-coco/2.0/codecoverage.html
    • 我将尝试进一步提高我的问题:当我从运行 My.Tests.dll 的 TeamCity MSTest 构建步骤调用 dotCover 时,正在跟踪哪些代码行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2011-12-11
    • 1970-01-01
    • 2014-09-13
    相关资源
    最近更新 更多