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

57

我有一个现有的C# 4项目,我使用TestDriven.Net和Visual Studio覆盖功能(例如从上下文菜单中选择“测试”->“使用覆盖”)进行了测试覆盖率检查。

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

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

我成功地在“过滤器”部分中删除了外部程序集(如NHibernate)的覆盖范围(通过明确指定我想要覆盖的程序集),但我无法排除受覆盖的程序集中的类型和方法。

输入图像描述

3个回答

70

好的,Martin,我想通了!只花了一个小时随机搜索筛选器语法... 当文档说要添加这样的筛选器时

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

他们是认真的...在这里,任何在<>中的内容都将完全由您代替,而其他任何内容都是字面意思

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

所以,我想要的过滤器是包括一个程序集(从一堆程序集中选出)并排除这个程序集中的一些命名空间。 我写了

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

9
通过使用 dotPeek 对 dotCover 源代码进行搜索,我已经成功找出了如何在“命令行”上指定多个筛选器。你可以用分号 ; 分隔筛选器,并且一个筛选器可以是装配件筛选器、类型筛选器或方法筛选器。因此,如果要包含 AssemblyA 但排除 AssemblyA.Blah 命名空间中的类型,则可以这样写: +:AssemblyA;-:type=AssemblyA.Blah.* - bruceboughton
@bruceboughton,你是怎么让dotPeek查看dotCover的源代码的?我一直想编写一个F#工具,使用命令行参数程序集过滤器遍历当前目录,并显示被排除/包含的程序集列表,这将实现我的梦想! - C Bauer

3
请查看命令行覆盖分析-应用过滤器页面。看起来你可以在“过滤器”部分设置排除项,类似于如何排除整个程序集。
假设你想忽略一个名为DoStuff的方法,该方法位于MyAwesomeAssembly库中的MyStuff类中。那么你的dotCover XML应该如下所示:
<Filters>
  <ExcludeFilters>
     <FilterEntry>
       <ModuleMask>MyAwesomeAssembly</ModuleMask>
       <ClassMask>MyStuff</ClassMask>
       <FunctionMask>DoStuff</FunctionMask>
     </FilterEntry>
  </ExcludeFilters>
</Filters>

免责声明:我没有使用过dotCover,所以不能百分之百确定这个方法是否有效。


Adam,感谢您的建议。如问题所述,我想使用TeamCity中“构建步骤”的“过滤器”部分。如果这是最后的选择,我才会采用XML配置(那么如何在TeamCity中使用dotCover XML配置文件呢?)。 - Martin R-L
@Martin 啊,抱歉,我误解了你的意思。看起来stealf在他们的回答中已经涵盖了你所需要的内容。希望能有所帮助。 :) - Adam Lear
ModuleMask、ClassMask和FunctionMask应该是属性,而不是元素。此外,每个掩码中必须指定完整的命名空间限定名称。我还发现,您可以使用菜单dotCover -> Edit Coverage Filters...命令轻松地从VS修改文件。 - Marek Dzikiewicz
有关使用 dotCover 过滤器的详细信息,请参见 Filtering with dotCover - Marek Dzikiewicz
值得一提的是,选择这个选项意味着您可以在本地运行dotCover并将过滤器存储在源代码控制中,而不是在CI工具内定义,但这取决于您的个人喜好。 - Paulie Waulie
我可以确认这个有效。我在 //Filters/ExcludeFilters/FilterEntry 中使用 <ModuleMask>*.Tests</ModuleMask> 来排除单元测试程序集。 - R. Schreurs

0
这是TeamCity文档关于过滤选项的说明:
每行指定一个要分析的程序集,使用以下语法:+:myassembly=;type=;method=* 使用-:myassembly排除代码覆盖率中的一个程序集。此处支持星号通配符(*)。

1
我已经阅读了文档,但无法让它正常工作。如果有一个可行的示例就太好了。 - Martin R-L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接