MSTEST0083: Gebruik '[ExecutableCondition]' in plaats van controles op 'File.Exists' vóór 'Process.Start'

Property Value
Regel-ID MSTEST0083
Title Gebruik '[ExecutableCondition]' in plaats van controles op 'File.Exists' vóór 'Process.Start'
Categorie Usage
Fix kan brekend of niet-brekend zijn Non-breaking
standaard ingeschakeld Ja
standaardniveau van ernst Informatie
geïntroduceerd in versie 4.4.0 (preview)
Is er een oplossing voor de code Ja, alleen voor C#

Important

Deze analyzer is gepland voor MSTest 4.4 en is alleen beschikbaar in preview-versies totdat MSTest 4.4.0 wordt uitgebracht.

Oorzaak

Een testmethode controleert eerst of er een uitvoerbaar bestand bestaat en retourneert of aanroept Assert.Inconclusive wanneer dit niet gebeurt, en roept Process.Start vervolgens aan met hetzelfde uitvoerbare pad.

Beschrijving van regel

Gebruik [ExecutableCondition] dit om te declareren dat voor een test een uitvoerbaar bestand is vereist. Het kenmerk rapporteert de test als overgeslagen wanneer MSTest het uitvoerbare bestand niet kan oplossen. Een vroege retour rapporteert de test onjuist als geslaagd en een imperatieve controle verbergt de vereiste voor detectie- en rapportagehulpprogramma's.

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

De analyzer herkent een first-statement guard zonder een zinvolle else vertakking wanneer beide File.Exists en later Process.Start hetzelfde constante uitvoerbare pad gebruiken.

Hoe schendingen op te lossen

Vervang de bewaker door [ExecutableCondition].

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

Een C#-codefix vervangt de bewaker door het kenmerk. Visual Basic rapporteert de diagnose, maar biedt geen automatische oplossing.

Wanneer waarschuwingen onderdrukken

Onderdrukt de regel wanneer de bestandscontrole gegevens valideert in plaats van een uitvoerbare vereiste, of wanneer de test gedrag nodig heeft dat ExecutableConditionAttribute niet kan worden weergegeven.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

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

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst ervan in op none in het configuratiebestand.

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

Zie Hoe u codeanalysewaarschuwingen kunt onderdrukken voor meer informatie.

Zie ook