MSTEST0083: Usare '[ExecutableCondition]' anziché i controlli con 'File.Exists' prima di chiamare 'Process.Start'

Proprietà Value
ID della regola MSTEST0083
Title Usare '[ExecutableCondition]' anziché i controlli 'File.Exists' prima di 'Process.Start'
Categoria Utilizzo
La modifica è dirompente o non dirompente Non rompente
Abilitato per impostazione predefinita Yes
Gravità predefinita Informazioni
introdotta nella versione 4.4.0 (anteprima)
È presente una correzione del codice Sì, solo per C#

Importante

Questo analizzatore è pianificato per MSTest 4.4 ed è disponibile solo nelle build di anteprima fino al rilascio di MSTest 4.4.0.

Cause

Un metodo di test controlla innanzitutto se un eseguibile esiste e restituisce o chiama Assert.Inconclusive quando non lo fa, quindi chiama Process.Start con lo stesso percorso eseguibile.

Descrizione della regola

Usare [ExecutableCondition] per dichiarare che un test richiede un eseguibile. L'attributo segnala il test come ignorato quando MSTest non riesce a risolvere il file eseguibile. Una restituzione anticipata segnala erroneamente il test come superato e un controllo imperativo nasconde il requisito dagli strumenti di individuazione e creazione di report.

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

L'analizzatore riconosce una guardia nella prima istruzione senza un ramo else significativo quando sia File.Exists sia il successivo Process.Start utilizzano lo stesso percorso eseguibile costante.

Come correggere le violazioni

Sostituire la protezione con [ExecutableCondition].

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

Una correzione del codice C# sostituisce la protezione con l'attributo . Visual Basic segnala la diagnostica, ma non fornisce una correzione automatica.

Quando eliminare gli avvisi

Eliminare la regola quando il controllo del file convalida i dati anziché un prerequisito eseguibile o quando il test necessita di un comportamento che ExecutableConditionAttribute non può esprimere.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

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

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità su none nel file di configurazione .

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

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Vedere anche