Język

MSTEST0084: Atrybuty zgodności platformy powinny być spójne z elementem "[OSCondition]"

Property Value
Identyfikator reguły MSTEST0084
Tytuł Atrybuty zgodności platformy powinny być spójne z [OSCondition]
Category Usage
Poprawka jest przełomowa lub nieprzełomowa Non-breaking
Domyślnie włączone Yes
domyślna ciężkość Informacje
wprowadzone w wersji 4.5.0
Czy istnieje poprawka kodu Tak, tylko w przypadku języka C#

Przyczyna

Klasa MSTest lub metoda używa klasy SupportedOSPlatformAttribute lub UnsupportedOSPlatformAttribute, ale jej msTest OSConditionAttribute nie wyraża zgodnego warunku systemu operacyjnego.

Opis reguły

Atrybuty zgodności platformy informują o analizie czasu kompilacji, ale nie kontrolują, czy narzędzie MSTest uruchamia test. Bez zgodnego [OSCondition] test może zostać uruchomiony w nieobsługiwanym systemie operacyjnym i zakończyć się błędem, zanim przejdzie do zachowania, które ma zweryfikować.

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

Reguła uwzględnia atrybuty zgodności platformy w teście, typach go zawierających i jego asemblacji. Zgodny element na poziomie klasy [OSCondition] może spełniać wymaganie dla metody testowej. Jeśli zarówno klasa, jak i metoda deklarują [OSCondition], ich połączone warunki muszą być zgodne z obowiązującym ograniczeniem platformy.

Reguła porównuje rodziny systemów operacyjnych, a nie wersje platform. Na przykład [SupportedOSPlatform("windows10.0")] nadal wymaga warunku dla rodziny Windows, ale [OSCondition] nie wymusza minimalnej wersji Windows. Analizator nie zgłasza ograniczeń wersji [UnsupportedOSPlatform], ponieważ wykluczenie całej rodziny systemów operacyjnych pomijałoby również obsługiwane wersje.

Jak naprawić naruszenia

Zachowaj atrybut zgodności platformy dla analizy interfejsu API i dodaj lub zaktualizuj [OSCondition], aby MSTest pomijał test w przypadku nieobsługiwanych rodzin systemów operacyjnych.

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

Poprawka kodu języka C# dodaje lub aktualizuje [OSCondition] , gdy analizator może określić zgodny warunek. Analizator zgłasza diagnostykę bez poprawki, gdy na przykład warunek metody na poziomie klasy powoduje konflikt z atrybutami platformy, platforma nie jest reprezentowana przez element OperatingSystems lub atrybuty platformy mieszają obsługiwane i nieobsługiwane ograniczenia. Rozwiąż te konflikty ręcznie. Visual Basic zgłasza diagnostykę, ale nie zapewnia automatycznej poprawki.

Kiedy pomijać ostrzeżenia

Pomiń regułę, gdy inny mechanizm gwarantuje, że test nie może działać w niezgodnym systemie operacyjnym i dodanie [OSCondition] zduplikuje te zasady.

Pomijanie ostrzeżenia

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz także