Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| 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.