MSTEST0080: Użyj atrybutu CICondition zamiast kontroli środowiska

Property Value
Identyfikator reguły MSTEST0080
Tytuł Użyj atrybutu CICondition zamiast kontroli środowiska
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 sprawdza wynik Environment.GetEnvironmentVariable("CI") pod kątem wartości null, a następnie albo kończy działanie wcześniej, albo wywołuje metodę Assert.Inconclusive, zamiast używać atrybutu [CICondition].

Opis reguły

Metody testowe, które sprawdzają, czy zmienna środowiskowa CI ma wartość null, a następnie kończą działanie wcześniej lub wywołują Assert.Inconclusive, powinny zamiast tego używać atrybutu [CICondition]. Atrybut rozpoznaje każdego dostawcę systemu ciągłej integracji znanego narzędziu MSTest i zgłasza test jako pominięty, a nie zaliczony, czego samo wczesne zakończenie funkcji nie zapewnia.

[TestMethod]
public void TestMethod()
{
    if (Environment.GetEnvironmentVariable("CI") is null) return; // Violation
}

Analizator jest celowo ograniczony do zmiennej ogólnego użycia CI , którą każdy główny dostawca ustawia. Warunek dotyczący zmiennej specyficznej dla danego dostawcy, takiej jak TF_BUILD, oznacza „pomiń w Azure Pipelines”, a [CICondition] oznacza „pomiń w dowolnym środowisku CI”, więc analizator nie sugeruje zastąpienia warunku specyficznego dla dostawcy.

Jak naprawić naruszenia

Zastąp sprawdzanie zmiennej środowiskowej atrybutem [CICondition] .

[TestMethod]
[CICondition(ConditionMode.Include)]
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 środowiska jest bardziej złożone niż proste sprawdzenie wartości null w pierwszej instrukcji albo jeśli potrzebujesz logiki warunkowej, której nie można wyrazić za pomocą [CICondition].

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 MSTEST0080
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0080

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

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

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

Zobacz także