Sprache
Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| 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.