MSTEST0080: usare l'attributo CICondition anziché i controlli dell'ambiente

Proprietà Value
ID regola MSTEST0080
Titolo Usare l'attributo CICondition anziché i controlli dell'ambiente
Categoria Utilizzo
La modifica è dirompente o non dirompente Non rompente
Abilitato per impostazione predefinita Sì
Gravità predefinita Informazioni
introdotta nella versione 4.4.0
È presente una correzione del codice Sì, solo per C#

Cause

La prima istruzione di un metodo di test verifica che il risultato di Environment.GetEnvironmentVariable("CI") non sia null e quindi termina anticipatamente oppure chiama Assert.Inconclusive, anziché usare l'attributo [CICondition].

Descrizione della regola

I metodi di test che verificano che la variabile di ambiente CI sia null e quindi terminano anticipatamente o chiamano Assert.Inconclusive dovrebbero invece usare l'attributo [CICondition]. L'attributo riconosce tutti i provider di integrazione continua supportati da MSTest e contrassegna il test come ignorato anziché come superato, cosa che un'uscita anticipata non fa.

[TestMethod]
public void TestMethod()
{
    if (Environment.GetEnvironmentVariable("CI") is null) return; // Violation
}

L'analizzatore è deliberatamente limitato alla variabile CI di uso generale impostata da tutti i principali fornitori. Una protezione su una variabile specifica del provider, ad esempio TF_BUILD, significa "skip on Azure Pipelines", mentre [CICondition] significa "skip on any CI", quindi l'analizzatore non suggerisce di sostituire un controllo specifico del provider.

Come correggere le violazioni

Sostituire il controllo della variabile di ambiente con l'attributo [CICondition] .

[TestMethod]
[CICondition(ConditionMode.Include)]
public void TestMethod() { }

Una correzione del codice C# sostituisce automaticamente la protezione con l'attributo . Il codice Visual Basic presenta questa diagnostica, ma non dispone di una correzione automatica; applicare manualmente l'attributo.

Quando eliminare gli avvisi

È possibile eliminare questo avviso se il controllo dell'ambiente è più complesso di un semplice controllo null di prima istruzione o se è necessaria una logica condizionale che [CICondition] non può esprimere.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

#pragma warning disable MSTEST0080
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0080

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità su none nel file di configurazione .

[*.{cs,vb}]
dotnet_diagnostic.MSTEST0080.severity = none

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Vedere anche