【问题标题】:How do I exclude types and methods from being covered by dotCover in TeamCity?如何在 TeamCity 的 dotCover 中排除类型和方法?
【发布时间】:2011-08-03 15:27:06
【问题描述】:

我有一个现有的 C# 4 项目,我已经使用 TestDriven.Net 和 Visual Studio 覆盖率功能检查了测试覆盖率,即上下文菜单中的 Test With -> Coverage。

该项目包含一些我不想涉及的代码,我通过为这些类型和方法添加 [ExcludeFromCodeCoverage] 解决了这个问题。

我们刚刚将 TeamCity 升级到 6.0.3,并且我在 NUnit 构建步骤中添加了 dotCover 覆盖。

我已经设法在“过滤器”部分中删除了对 NHibernate 等外部程序集的覆盖(通过明确说明我想要覆盖的程序集),但我正在努力解决如何从覆盖的程序集中排除类型和方法.

【问题讨论】:

    标签: c# teamcity code-coverage dotcover


    【解决方案1】:

    查看Coverage Analysis from the Command Line - Applying filters 页面。看起来您可以在“过滤器”部分设置排除项,类似于您排除整个程序集的方式。

    假设您要忽略 MyStuff 类中包含的名为 DoStuff 的方法,该类位于 MyAwesomeAssembly 库中。那么你的 dotCover XML 应该是这样的:

    <Filters>
      <ExcludeFilters>
         <FilterEntry>
           <ModuleMask>MyAwesomeAssembly</ModuleMask>
           <ClassMask>MyStuff</ClassMask>
           <FunctionMask>DoStuff</FunctionMask>
         </FilterEntry>
      </ExcludeFilters>
    </Filters>
    

    免责声明:我不使用 dotCover,所以我不能 100% 确定这是否真的有效。

    【讨论】:

    • 亚当,感谢您的意见。如问题所述,我想使用 TeamCity 中构建步骤的“过滤器”部分。如果它是最后一个选项,我只会求助于 XML 配置(以及如何将 dotCover XML 配置文件与 TeamCity 一起使用?)。
    • @Martin 啊,对不起,我误解了你的意思。看起来stealf在他们的回答中涵盖了你需要的东西。希望有帮助。 :)
    • ModuleMask、ClassMask 和 FunctionMask 应该是属性,而不是元素。此外,必须在每个掩码中指定完整的命名空间限定名称。我还发现您可以使用菜单 dotCover -> Edit Coverage Filters... 命令轻松地从 VS 修改文件。
    • 有关使用 dotCover 过滤器的详细信息,请参阅 Filtering with dotCover
    • 值得一提的是,使用此选项意味着您可以在本地运行 dotCover 体验相同的结果,并且可以在源代码控制中进行过滤,而不是在 CI 工具中定义,但这取决于您的偏好。
    【解决方案2】:

    这是 TeamCity 文档关于过滤器选项的说明:

    使用以下语法指定程序集以每行分析一个:+:myassembly=;type=;method=*

    使用 -:我的程序集 从代码覆盖范围中排除程序集。此处支持星号通配符 (*)。

    【讨论】:

    • 我已阅读文档,但无法正常工作。一个工作样本会很棒。
    【解决方案3】:

    好的,马丁,我想通了!只花了一个小时随机戳过滤器语法......当文档说要添加这样的过滤器时

    +:myassembly=*;type=*;method=***
    

    他们真的是这个意思...&lt;&gt; 中的任何内容都完全由您替换,其他任何内容都是文字

    +:<myassembly>;type=<filter>;method=<filter>
    

    所以,我想要的过滤器是包含一个程序集(来自一堆程序集),然后在该程序集中排除一些命名空间。我写了

    +:Omnyx.Scanner
    -:Omnyx.Scanner;type=Omnyx.Scanner.Simulation.*
    -:Omnyx.Scanner;type=Omnyx.Scanner.ToolsCommon.*
    

    【讨论】:

    • 在浏览了 dotCover 源代码(自然是使用 dotPeek)之后,我设法弄清楚了如何在 命令行 上指定多个过滤器。您可以使用; 分隔过滤器,过滤器可以是程序集过滤器、类型过滤器方法过滤器。所以要在 AssemblyA.Blah 命名空间中包含 AssemblyA 但排除类型:+:AssemblyA;-:type=AssemblyA.Blah.*
    • @bruceboughton 您是如何让 dotPeek 查看 dotCover 的源代码的?我一直渴望编写一个 F# 工具,该工具使用命令行参数程序集过滤器来控制当前目录并显示排除/包含程序集的列表,这将使我的梦想成真!
    猜你喜欢
    • 2011-04-22
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多