2016-07-07 73 views
7

我試圖禁用整個類的代碼分析規則,但不是整個項目,只有一個類。在下面的示例中,構建生成CA1822警告,因爲它認爲單元測試方法應該是靜態的。如何禁用整個類的特定代碼分析警告

解決方法是以下屬性添加到每個單元測試方法: [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic")]

然而,這很麻煩和雜波與許多單元測試的類。

我已經試過:

  1. 移動屬性類
  2. 結束語所有的方法

#pragma warning disable CA1822

#pragma warning restore CA1822

無論這兩個方法已經奏效。

public class TestClass 
{ 
    public TestClass() 
    { 
     // some setup here 
    } 

    [Fact] 
    public void My_Unit_Test1() 
    { 
     // the 'this' parameter is never used, causes CA warning 1822 
    } 

    [Fact] 
    public void My_Unit_Test2() 
    { 
     // the 'this' parameter is never used, causes CA warning 1822 
    } 
} 

使用VS2015 Update 2,.net 4.61和新的Code Analysis Analyzers。

+0

我通過使用不同的代碼分析規則集的單元測試項目,解決了這個(等)的問題。我關閉了不適用於單元測試項目的規則。 –

+0

@MthetheWWatson - 我也爲測試項目使用了不同的規則集。在這種情況下,我希望規則適用於我的單元測試項目,而不是一個特定的類。 – SFun28

+0

不幸的是,你不能這樣做 - 抑制必須始終適用於報告警告/錯誤的級別,所以如果這是一種方法,那麼只能抑制該方法的警告。 –

回答

3

這不完全是你想要的,但可能是比你有的情況更小的罪惡。

你可以告訴代碼分析,忽略特定類具有以下屬性:

[System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] 

請注意,您的項目需要有Visual Studio的選項,「禁止從生成代碼的結果(託管只)」檢查。

儘管很煩人,但如果臨時評論屬性,仍然可以選擇對文件運行代碼分析。

+0

'ExcludeFromCodeCoverage'指定應從**代碼覆蓋率信息**中排除歸因代碼;而不是來自代碼分析。請參閱MSDN文檔(https://msdn.microsoft.com/en-us/library/system.diagnostics.codeanalysis.excludefromcodecoverageattribute(v=vs.110).aspx) –

0

右鍵單擊錯誤列表選項卡下的錯誤,您可以選擇「In Source」和「In Suppression File」。

如果選擇「In Source」,SuppressMessageAttibute將被添加到源代碼(方法或類級別)。

'[assembly:SUppressMessage'將被添加到GlobalSupressions.cs文件中,您可以配置該屬性的'Target'。

snapshot here

相關問題