56

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

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

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

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

在此处输入图像描述

4

3 回答 3

66

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

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

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

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

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

+:Omnyx.Scanner
-:Omnyx.Scanner;type=Omnyx.Scanner.Simulation.*
-:Omnyx.Scanner;type=Omnyx.Scanner.ToolsCommon.*
于 2011-06-01T22:51:08.997 回答
3

从命令行查看覆盖分析 - 应用过滤器页面。看起来您可以在“过滤器”部分设置排除项,类似于您排除整个程序集的方式。

假设您想忽略库DoStuff中包含在类中的一个MyStuff名为的方法MyAwesomeAssembly。那么您的 dotCover XML 应该如下所示:

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

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

于 2011-05-03T04:59:29.430 回答
0

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

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

使用 -:myassembly 将程序集排除在代码覆盖范围之外。此处支持星号通配符 (*)。

于 2011-05-06T12:57:53.003 回答