2011-04-12 61 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