Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| 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.