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

Property Value
ID da regra MSTEST0083
Título Utilize '[ExecutableCondition]' em vez de verificações com 'File.Exists' antes de 'Process.Start'
Categoria Usage
A correção é invasiva ou não invasiva Inquebrável
Ativado por padrão Yes
Severidade padrão Informações
Introduzido na versão 4.4.0 (pré-visualização)
Existe uma correção de código Sim, só para C#

Importante

Este analisador está planeado para o MSTest 4.4 e está disponível apenas em versões pré-visualizadas até ao lançamento do MSTest 4.4.0.

Cause

Um método de teste verifica primeiro se existe um executável e retorna ou chama Assert.Inconclusive quando não existe, depois chama Process.Start pelo mesmo caminho executável.

Descrição da regra

Use [ExecutableCondition] para declarar que um teste requer um executável. O atributo reporta o teste como saltado quando o MSTest não consegue resolver o executável. Um retorno antecipado indica incorretamente que o teste foi aprovado, e uma verificação imperativa oculta o requisito das ferramentas de deteção e de relatório.

[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 um ramo else significativo quando tanto File.Exists como o Process.Start posterior utilizam 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 em código C# substitui a guarda pelo atributo. O Visual Basic reporta o diagnóstico mas não fornece uma solução automática.

Quando suprimir avisos

Suprima a regra quando a verificação do ficheiro servir para validar dados em vez de validar um pré-requisito executável, ou quando o teste precisar de um comportamento que ExecutableConditionAttribute não consegue exprimir.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

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

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade 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.

Ver também