MSTEST0083: Użyj atrybutu '[ExecutableCondition]' zamiast sprawdzeń 'File.Exists' przed wywołaniem 'Process.Start'

Property Wartość
Identyfikator reguły MSTEST0083
Title Użyj elementu "[ExecutableCondition]" zamiast sprawdzania "File.Exists" przed wywołaniem "Process.Start".
Kategoria Usage
Poprawka jest przełomowa lub nieprzełomowa Non-breaking
Domyślnie włączone Yes
domyślna ciężkość Informacje
wprowadzone w wersji 4.4.0
Czy istnieje poprawka kodu Tak, tylko w przypadku języka C#

Przyczyna

Metoda testowa najpierw sprawdza, czy plik wykonywalny istnieje, i zwraca wynik lub wywołuje Assert.Inconclusive, jeśli plik nie istnieje, a następnie wywołuje Process.Start, przekazując tę samą ścieżkę do pliku wykonywalnego.

Opis reguły

Użyj [ExecutableCondition] polecenia , aby zadeklarować, że test wymaga pliku wykonywalnego. Atrybut zgłasza test jako pominięty, gdy narzędzie MSTest nie może rozpoznać pliku wykonywalnego. Przedwczesne zakończenie błędnie zgłasza, że test został zaliczony, a kontrola imperatywna ukrywa wymaganie przed narzędziami do wykrywania i raportowania.

[TestMethod]
public void RunsTool()
{
    if (!File.Exists("tool.exe")) return; // Violation
    Process.Start("tool.exe");
}

Analizator rozpoznaje ochronę pierwszej instrukcji bez znaczącej else gałęzi, gdy obie File.Exists i późniejsze Process.Start używają tej samej stałej ścieżki wykonywalnej.

Jak naprawić naruszenia

Zastąp strażnik elementem [ExecutableCondition].

[TestMethod]
[ExecutableCondition("tool.exe")]
public void RunsTool() => Process.Start("tool.exe");

Poprawka kodu w języku C# zastępuje ochronę atrybutem . Visual Basic zgłasza diagnostykę, ale nie zapewnia automatycznej poprawki.

Kiedy pomijać ostrzeżenia

Pomiń regułę, gdy plik sprawdza poprawność danych, a nie wykonywalne wymaganie wstępne lub gdy test wymaga zachowania, które ExecutableConditionAttribute nie może wyrazić.

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

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

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

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

Zobacz także