MSTEST0083: Använd "[ExecutableCondition]" i stället för "File.Exists"-kontroller före "Process.Start"

Property Value
Regel-ID MSTEST0083
Titel Använd "[ExecutableCondition]" i stället för "File.Exists"-kontroller före "Process.Start"
Kategori Usage
Korrigeringen är antingen brytande eller icke-brytande Oumbrytbar
Aktiverad som standard Yes
Standard allvarlighetsgrad Info
introducerades i version 4.4.0 (förhandsversion)
Finns det en kodkorrigering Ja, endast för C#

Important

Den här analysatorn är planerad för MSTest 4.4 och är endast tillgänglig i förhandsversioner tills MSTest 4.4.0 släpps.

Orsak

En testmetod kontrollerar först om en körbar fil finns och returnerar eller anropar Assert.Inconclusive när den inte gör det och anropar Process.Start sedan med samma körbara sökväg.

Regelbeskrivning

Använd [ExecutableCondition] för att deklarera att ett test kräver en körbar fil. Attributet rapporterar testet som överhoppat när MSTest inte kan hitta den körbara filen. En tidig retur rapporterar testet felaktigt som godkänt och en imperativ kontroll döljer kravet från identifierings- och rapporteringsverktyg.

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

Analysatorn känner igen en first-statement guard utan en meningsfull else gren när båda File.Exists och senare Process.Start använder samma konstanta körbara sökväg.

Så här åtgärdar du överträdelser

Ersätt skyddet med [ExecutableCondition].

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

En C#-kodkorrigering ersätter skyddet med attributet. Visual Basic rapporterar diagnostiken men tillhandahåller ingen automatisk korrigering.

När du ska ignorera varningar

Ignorera regeln när filkontrollen validerar data i stället för en körbar förutsättning, eller när testet behöver beteende som ExecutableConditionAttribute inte kan uttryckas.

Undertryck en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även