Sprache

MSTEST0084: Plattformkompatibilitätsattribute sollten mit "[OSCondition]" konsistent sein.

Eigentum Wert
Regel-ID MSTEST0084
Title Plattformkompatibilitätsattribute sollten konsistent sein mit [OSCondition]
Kategorie Usage
Fix führt oder führt nicht zur Unterbrechung Non-breaking
Standardmäßig aktiviert Yes
Voreingestellte Schwere Info
wurde in Version eingeführt. 4.5.0
Gibt es eine Codekorrektur Ja, nur für C#

Ursache

Eine MSTest-Klasse oder -Methode verwendet SupportedOSPlatformAttribute oder UnsupportedOSPlatformAttribute, aber seine MSTest OSConditionAttribute drückt keine kompatible Betriebssystembedingung aus.

Regelbeschreibung

Plattformkompatibilitätsattribute informieren die Kompilierungszeitanalyse, steuern jedoch nicht, ob MSTest einen Test ausführt. Ohne ein kompatibles [OSCondition] kann ein Test unter einem nicht unterstützten Betriebssystem ausgeführt werden und fehlschlagen, bevor er zu dem Verhalten gelangt, das er überprüfen soll.

[TestMethod]
[SupportedOSPlatform("windows")]
public void UsesWindowsApi() { } // Violation

Die Regel berücksichtigt Attribute zur Plattformkompatibilität für den Test, die ihn enthaltenden Typen sowie die zugehörige Montage. Ein kompatibles Klassenattribut [OSCondition] kann die Anforderung für eine Testmethode erfüllen. Wenn sowohl die Klasse als auch die Methode [OSCondition] deklarieren, müssen die kombinierten Bedingungen mit der effektiven Plattformeinschränkung übereinstimmen.

Die Regel vergleicht Betriebssystemfamilien, nicht Plattformversionen. Zum Beispiel erfordert [SupportedOSPlatform("windows10.0")] weiterhin eine Bedingung für die Windows-Familie, aber [OSCondition] erzwingt nicht die Mindestversion von Windows. Der Analysator meldet keine Versionsbeschränkungen [UnsupportedOSPlatform], da das Ausschließen einer gesamten Betriebssystemfamilie auch unterstützte Versionen überspringen würde.

Wie man Verstöße behebt

Behalten Sie das Plattformkompatibilitätsattribut für die API-Analyse bei, und fügen Sie [OSCondition] hinzu oder aktualisieren Sie es, damit MSTest den Test bei nicht unterstützten Betriebssystemfamilien überspringt.

[TestMethod]
[SupportedOSPlatform("windows")]
[OSCondition(OperatingSystems.Windows)]
public void UsesWindowsApi() { }

Eine C#-Codekorrektur fügt [OSCondition] hinzu oder aktualisiert es, wenn der Analyzer eine kompatible Bedingung ermitteln kann. Der Analysator meldet eine Diagnose ohne Fix, wenn beispielsweise die Bedingung auf Klassenebene einer Methode mit ihren Plattformattributen in Konflikt steht, die Plattform nicht durch OperatingSystems dargestellt wird oder die Plattformattribute unterstützte und nicht unterstützte Einschränkungen kombinieren. Lösen Sie diese Konflikte manuell. Visual Basic meldet die Diagnose, stellt aber keine automatische Korrektur bereit.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie die Regel, wenn ein anderer Mechanismus garantiert, dass der Test nicht auf einem inkompatiblen Betriebssystem ausgeführt werden kann, und das Hinzufügen [OSCondition] würde diese Richtlinie duplizieren.

Unterdrücken einer Warnung

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

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

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

Siehe auch