2016-07-07 3 views
7

Ich versuche, eine Code-Analyse-Regel über eine gesamte Klasse zu deaktivieren, aber nicht für das gesamte Projekt, nur eine einzige Klasse zu deaktivieren. Im folgenden Beispiel generiert der Build eine CA1822-Warnung, da er der Meinung ist, dass die Komponententestmethoden statisch sein sollten.Wie spezifische Code-Analyse Warnung für ganze Klasse

Das Update ist das folgende Attribut zu jeder Einheit Testmethode hinzufügen: [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic")]

Allerdings, das ist umständlich und unübersichtlich, eine Klasse mit vielen Unit-Tests.

Ich habe versucht:

  1. Bewegen Sie das Attribut der Klasse
  2. alle Methoden Wrapping in

#pragma warning disable CA1822

#pragma warning restore CA1822

von Weder diese beiden Ansätze haben funktioniert.

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 
    } 
} 

Mit VS2015 Update 2, .net 4.61 und den neuen Code Analysis Analysatoren. Dies ist

+0

ich adressierte diese (und andere) Fragen durch einen anderen Code-Analyse-Regelsatz für Unit-Test-Projekte mit. Ich habe die Regeln deaktiviert, die nicht für Unit Test-Projekte gelten. –

+0

@MatthewWatson - Ich verwende einen anderen Regelsatz für Testprojekte. In diesem Fall möchte ich, dass die Regel auf mein Komponententestprojekt angewendet wird, nicht auf eine bestimmte Klasse. – SFun28

+0

Leider können Sie das nicht tun - die Unterdrückung muss immer auf die Ebene angewendet werden, auf der die Warnung/der Fehler gemeldet wird. Wenn dies eine Methode ist, können Sie nur die Warnung für diese Methode unterdrücken. –

Antwort

3

nicht genau das, was Sie wollen, aber vielleicht ein kleineres Übel als die Situation, die Sie haben werden.

Sie können Code-Analyse sagen, eine bestimmte Klasse mit dem folgende Attribute zu ignorieren:

[System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] 

Beachten Sie, dass Ihr Projekt die Visual Studio Option haben muss „Unterdrückt Ergebnisse generierten Code (verwaltet nur)“ geprüft.

Während ärgerlich, können Sie immer noch entscheiden, Code-Analyse auf die Datei ausführen, wenn Sie vorübergehend das Attribut kommentieren.

+0

'ExcludeFromCodeCoverage' gibt an, dass der attributierte Code von ** Code Coverage Information ** ausgeschlossen werden soll; nicht aus der Codeanalyse.Siehe die MSDN-Dokumentation (https://msdn.microsoft.com/en-us/library/system.diagnostics.codeanalysis.excludefromcodecoverageattribute(v=vs.110).aspx) –

0

Rechtsklick auf den Fehler unter der Fehlerliste Tab, und Sie können entweder ‚In Quelle‘ und ‚In Unterdrückung Datei‘.

SuppressMessageAttibute wird auf den Quellcode (Methode oder Klassenstufe) hinzugefügt werden, wenn Sie wählen Sie ‚In Source‘.

‚[assembly: SuppressMessage‘ wird GlobalSupressions.cs Datei hinzugefügt werden, und Sie können das ‚Ziel‘ des Attributs Config.

snapshot here

Verwandte Themen