2016-07-07 44 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

相关问题