MSTEST0083: Use '[ExecutableCondition]' em vez de verificações de 'File.Exists' antes de 'Process.Start'

Property Value
ID da regra MSTEST0083
Título Use '[ExecutableCondition]' em vez de verificações de 'File.Exists' antes de 'Process.Start'
Categoria Usage
Correção interruptiva ou sem interrupção Inquebrável
Habilitado por padrão Yes
Severidade padrão Informações
introduzido na versão 4.4.0 (versão prévia)
Há uma correção de código Sim, somente para C#

Importante

Este analisador está planejado para MSTest 4.4 e está disponível apenas em builds de visualização até que o MSTest 4.4.0 seja lançado.

Cause

Primeiro, um método de teste verifica se um executável existe e retorna ou chama Assert.Inconclusive quando não o faz e, em seguida, chama Process.Start com o mesmo caminho executável.

Descrição da regra

Use [ExecutableCondition] para declarar que um teste requer um executável. O atributo marca o teste como ignorado quando o MSTest não consegue resolver o executável. Um retorno antecipado marca incorretamente o teste como aprovado, e uma verificação imperativa oculta o requisito das ferramentas de descoberta e de geração de relatórios.

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

O analisador reconhece uma cláusula de guarda na primeira instrução sem uma ramificação else significativa quando tanto o File.Exists quanto o Process.Start posterior usam o mesmo caminho de execução constante.

Como corrigir violações

Substitua a proteção por [ExecutableCondition].

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

Uma correção de código em C# substitui a cláusula de guarda pelo atributo. Visual Basic relata o diagnóstico, mas não fornece uma correção automática.

Quando suprimir avisos

Suprime a regra quando a verificação de arquivo valida dados em vez de um pré-requisito executável ou quando o teste precisa de um comportamento que ExecutableConditionAttribute não possa ser expresso.

Suprimir um aviso

Se você quiser suprimir apenas uma única violação, adicione diretivas de pré-processador ao arquivo de origem para desabilitar a regra e, em seguida, habilitá-la novamente.

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

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

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

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Consulte também