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 | 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.