2011-04-12 97 views
54

我有一个现有的C#4项目,我使用TestDriven.Net和Visual Studio覆盖功能(即Test With - > Coverage从上下文菜单中检查了测试覆盖率)。如何排除TeamCity中dotCover覆盖的类型和方法?

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

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

我已经设法删除“Filters”部分中的外部程序集(例如NHibernate)的覆盖率(通过明确声明我希望覆盖的程序集),但我正在努力处理如何从覆盖范围中排除类型和方法组件。

enter image description here

回答

60

好吧,马丁,我想通了!只用了在过滤器语法随机戳......当文件说,一个小时增加这样

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

,他们真的是这样......其中<>什么完全由你和任何更换否则是文字

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

所以,我想要的过滤器将包括一个单一的组件(从一堆组件),然后排除在装配几个命名空间。我写了

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

在通过dotCover源码(通过dotPeek,自然)进行拖网之后,我已经设法解决了如何在**命令行**上指定多个过滤器。你**用'''分开过滤器**,过滤器可以是组件过滤器,类型过滤器**或**方法过滤器。因此,要包含AssemblyA,但在AssemblyA.Blah名称空间中排除类型:'+:AssemblyA; - :type = AssemblyA.Blah。*' – bruceboughton 2011-09-30 14:17:04

+0

@bruceboughton您是如何让dotPeek查看dotCover的源代码的?我一直渴望编写一个F#工具,它使用命令行参数程序过滤器捕捉当前目录,并显示排除/包含的程序集列表,这将使我的梦想成真! – 2015-09-18 19:31:15

2

看看在dotCover Tips & Tricks页面。看起来您可以在“过滤器”部分设置排除项目,这与排除整个组件的方式类似。

比方说,您要忽略库中类MyStuff中包含的名为DoStuff的方法。然后你dotCover XML应该是这个样子:

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

免责声明:我不使用dotCover,所以我不是100%肯定这是否会实际工作。

+0

亚当,感谢您的输入。正如问题所述,我想使用TeamCity中构建步骤的“Filters”部分。如果它是最后一个选项,那么我只会求助于XML配置(以及如何使用TeamCity中的dotCover XML配置文件?)。 – 2011-05-04 06:21:30

+0

@马丁啊,对不起,我误解了你的意思。它看起来像stealf涵盖了你在他们的答案中需要的东西。希望有所帮助。 :) – 2011-05-06 13:48:53

+0

ModuleMask,ClassMask和FunctionMask应该是属性,而不是元素。此外,必须在每个掩码中指定完整的命名空间限定名称。我还发现,通过使用菜单dotCover - > Edit Coverage Filters ...命令,您可以轻松地修改VS中的文件。 – 2012-05-02 07:17:38

0

这就是TeamCity的文档说关于滤波器的选择:

指定组件使用以下语法来分析每行一个:+:MyAssembly程序= ;类型=;方法= *

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

+1

我已阅读文档,但无法使其正常工作。一个工作样本会很棒。 – 2011-05-07 07:59:31