如何在 TeamCity 的 dotCover 中排除类型和方法?

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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# 工具,该工具使用命令行参数程序集过滤器来控制当前目录并显示排除/包含程序集的列表,这将使我的梦想成真!

以上是关于如何在 TeamCity 的 dotCover 中排除类型和方法?的主要内容,如果未能解决你的问题,请参考以下文章

TeamCity 7 中带有 dotCover 的 ExcludeFromCodeCoverage 属性

如何从Jenkins的多个测试项目中获取dotCover覆盖率报告

如何在 java 中获取 Teamcity 配置的值?

如何在 Teamcity 中归档构建配置?

带有命令行的 dotCover 过滤器

如何在teamcity中覆盖maven项目版本