MSTEST0079: Usare l'attributo ArchitectureCondition anziché i controlli di runtime

Proprietà Value
ID regola MSTEST0079
Titolo Usare l'attributo ArchitectureCondition anziché i controlli di runtime
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 confronta ProcessArchitecture con un valore Architecture e quindi termina anticipatamente oppure chiama Assert.Inconclusive, anziché usare l'attributo [ArchitectureCondition].

Descrizione della regola

I metodi di test che confrontano RuntimeInformation.ProcessArchitecture e quindi restituiscono o chiamano Assert.Inconclusive in anticipo devono usare invece l'attributo [ArchitectureCondition] . L'attributo è più dichiarativo e più facile da individuare, e segnala il test come saltato anziché come superato, cosa che un ritorno anticipato non fa.

[TestMethod]
public void TestMethod()
{
    if (RuntimeInformation.ProcessArchitecture != Architecture.X64) return; // Violation
}

L'analizzatore riconosce la guardia solo quando è la prima istruzione del metodo, senza alcun ramo else, e quando il membro Architecture a cui si fa riferimento ha un flag TestArchitectures corrispondente.

Come correggere le violazioni

Sostituire il controllo di runtime con l'attributo [ArchitectureCondition] .

[TestMethod]
[ArchitectureCondition(TestArchitectures.X64)]
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 di runtime è più complesso di una semplice protezione da prima istruzione o se è necessaria una logica condizionale che [ArchitectureCondition] 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 MSTEST0079
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0079

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.MSTEST0079.severity = none

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

Vedere anche