2016-07-07 7 views
7

Sto tentando di disabilitare una regola di analisi del codice su un'intera classe, ma NON per l'intero progetto, solo una singola classe. Nell'esempio seguente, la build genera un avviso CA1822 poiché ritiene che i metodi di test dell'unità dovrebbero essere statici.Come disattivare l'avviso di analisi del codice specifico per l'intera classe

La correzione è aggiungere il seguente attributo per ogni metodo di prova unità: [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic")]

Tuttavia, che è ingombrante e ingombra una classe con molti test di unità.

ho provato:

  1. Spostare l'attributo alla classe
  2. Wrapping tutti i metodi in

#pragma warning disable CA1822

#pragma warning restore CA1822

Nessuno di questi due gli approcci hanno funzionato.

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

Utilizzando VS2015 Update 2, .NET 4.61, e il nuovo codice di analisi analizzatori.

+0

ho affrontato questo (e altri) problemi utilizzando un diverso set di regole di analisi del codice per i progetti di unità di prova. Ho disattivato le regole che non si applicavano ai progetti Unit Test. –

+0

@MatthewWatson - Uso anche un set di regole diverso per i progetti di test. In questo caso, voglio che la regola si applichi al mio progetto di test unitario, ma non a una classe specifica. – SFun28

+0

Sfortunatamente non è possibile farlo - la soppressione deve sempre essere applicata al livello a cui viene segnalato l'avviso/errore, quindi se questo è un metodo, è possibile sopprimere solo l'avviso per quel metodo. –

risposta

3

Questo non è esattamente quello che vuoi ma potrebbe essere un male minore della situazione che hai.

Si può dire di analisi del codice di ignorare una classe particolare con il seguente attributo:

[System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] 

Nota che il progetto ha bisogno di avere la possibilità di Visual Studio "Elimina i risultati di codice generato (gestito solo)" controllato.

Sebbene fastidioso, è ancora possibile scegliere di eseguire l'analisi del codice sul file se si commenta temporaneamente l'attributo.

+0

'ExcludeFromCodeCoverage' specifica che il codice attribuito deve essere escluso dalle ** informazioni sulla copertura del codice **; non dall'analisi del codice.Vedere la documentazione MSDN (https://msdn.microsoft.com/en-us/library/system.diagnostics.codeanalysis.excludefromcodecoverageattribute(v=vs.110).aspx) –

0

Fare clic con il pulsante destro del mouse sull'errore nella scheda dell'elenco degli errori e selezionare "In origine" e "In file di eliminazione".

SuppressMessageAttibute verrà aggiunto al codice sorgente (metodo o livello di classe) se si seleziona "In Source".

'[assembly: SUppressMessage' verrà aggiunto al file GlobalSupressions.cs e sarà possibile configurare la 'destinazione' dell'attributo.

snapshot here

Problemi correlati