MSTEST0079: Verwenden des ArchitectureCondition-Attributs anstelle von Laufzeitüberprüfungen

Eigenschaft Wert
Regel-ID MSTEST0079
Title Verwenden des ArchitectureCondition-Attributs anstelle von Laufzeitüberprüfungen
Kategorie Usage
Die Behebung ist eingreifend oder nicht eingreifend Non-breaking
Standardmäßig aktiviert Ja
Voreingestellte Schwere Info
wurde in Version eingeführt. 4.4.0 (Vorschau)
Gibt es eine Codekorrektur Ja, nur für C#

Ursache

Die erste Anweisung einer Testmethode vergleicht ProcessArchitecture einen Architecture Wert und gibt dann entweder früh oder aufruft Assert.Inconclusivezurück, anstatt das [ArchitectureCondition] Attribut zu verwenden.

Regelbeschreibung

Testmethoden, die RuntimeInformation.ProcessArchitecture das Attribut vergleichen und dann frühzeitig zurückgeben oder aufrufen Assert.Inconclusive , sollten stattdessen das [ArchitectureCondition] Attribut verwenden. Das Attribut ist deklarativer und auffindbarer und meldet den Test als übersprungen und nicht bestanden, was eine frühzeitige Rückgabe nicht vornimmt.

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

Der Analyzer erkennt den Schutz nur, wenn es sich um die erste Anweisung der Methode ohne else Verzweigung und wenn das referenzierte Architecture Element über eine übereinstimmende TestArchitectures Kennzeichnung verfügt.

Wie man Verstöße behebt

Ersetzen Sie die Laufzeitüberprüfung durch das [ArchitectureCondition] Attribut.

[TestMethod]
[ArchitectureCondition(TestArchitectures.X64)]
public void TestMethod() { }

Ein C#-Codekorrektur ersetzt den Guard durch das Attribut für Sie. Visual Basic Code verfügt über diese Diagnose, verfügt aber nicht über einen automatischen Fix. Wenden Sie das Attribut manuell an.

Wann sollten Warnungen unterdrückt werden?

Sie können diese Warnung unterdrücken, wenn die Laufzeitüberprüfung komplexer als ein einfacher First-Statement Guard ist oder wenn Sie bedingte Logik benötigen, die [ArchitectureCondition] nicht ausgedrückt werden kann.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad auf none in der Konfigurationsdatei fest.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Siehe auch