Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| 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.