MSTEST0079: Użyj atrybutu ArchitectureCondition zamiast sprawdzania środowiska uruchomieniowego

Property Value
Identyfikator reguły MSTEST0079
Tytuł Użyj atrybutu ArchitectureCondition zamiast sprawdzania środowiska uruchomieniowego
Kategoria Usage
Poprawka jest przełomowa lub nieprzełomowa Non-breaking
Domyślnie włączone Tak
domyślna ciężkość Informacje
wprowadzone w wersji 4.4.0
Czy istnieje poprawka kodu Tak, tylko w przypadku języka C#

Przyczyna

Pierwsza instrukcja metody testowej porównuje element ProcessArchitecture z wartością Architecture, a następnie albo wcześniej kończy działanie, albo wywołuje Assert.Inconclusive, zamiast używać atrybutu [ArchitectureCondition].

Opis reguły

Metody testowe, które porównują RuntimeInformation.ProcessArchitecture , a następnie wczesne zwracanie lub wywoływanie Assert.Inconclusive , powinny zamiast tego używać atrybutu [ArchitectureCondition] . Atrybut jest bardziej deklaratywny i wykrywalny, a test jest zgłaszany jako pominięty, a nie przekazywany, co nie powoduje wcześniejszego powrotu.

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

Analizator rozpoznaje strażnika tylko wtedy, gdy jest to pierwsza instrukcja metody, bez else gałęzi, a gdy przywołyny Architecture element członkowski ma zgodną TestArchitectures flagę.

Jak naprawić naruszenia

Zastąp sprawdzanie środowiska uruchomieniowego atrybutem [ArchitectureCondition] .

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

Poprawka kodu w języku C# zastępuje ochronę atrybutem . Visual Basic kod ma tę diagnostykę, ale nie ma automatycznej poprawki; zastosuj atrybut ręcznie.

Kiedy pomijać ostrzeżenia

Możesz zignorować to ostrzeżenie, jeśli sprawdzenie w czasie wykonywania jest bardziej złożone niż proste zabezpieczenie w postaci instrukcji warunkowej na początku albo jeśli potrzebujesz logiki warunkowej, której nie da się wyrazić za pomocą [ArchitectureCondition].

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

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

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

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

Zobacz także