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.
MSTEST0058: Evite asserções nos
| Propriedade | Valor |
|---|---|
| ID da regra | MSTEST0058 |
| Título | Evitar asserções em blocos de captura |
| Categoria | Usage |
| A correção é invasiva ou não invasiva | Non-breaking |
| Ativado por padrão | Yes |
| Severidade padrão | Informações |
| Introduzido na versão | 4.1.0 |
| Existe uma correção de código | Não |
Motivo
Um método de teste contém instruções de asserção dentro de um catch bloco.
Descrição da regra
Colocar asserções em catch blocos é um anti-padrão que pode levar a resultados de testes confusos e torna os testes mais difíceis de compreender. Quando uma exceção é lançada, o bloco catch é executado e a afirmação é verificada. No entanto, se não for lançada nenhuma exceção, o catch bloco nunca se executa, podendo dar falsa confiança de que o teste passou.
Em vez disso, utilize Assert.Throws ou métodos semelhantes para verificar se as exceções esperadas são lançadas. Isto torna a intenção do teste mais clara e garante o comportamento adequado do teste.
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod()
{
try
{
// Code that might throw.
DoSomethingThatMightThrow();
}
catch (Exception ex)
{
Assert.AreEqual("Expected error message", ex.Message); // Violation
}
}
}
Como corrigir violações
Use Assert.Throws, Assert.ThrowsExactly ou métodos de asserção relacionados para testar exceções.
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod_ThrowsExceptionWithExpectedMessage()
{
InvalidOperationException exception = Assert.Throws<InvalidOperationException>(() => DoSomethingThatMightThrow());
Assert.AreEqual("Expected error message", exception.Message);
}
}
Quando suprimir avisos
Pode suprimir este aviso se tiver uma necessidade legítima de apanhar uma exceção e realizar uma validação complexa que não pode ser facilmente expressa usando métodos padrão de afirmação. No entanto, considere refatorar o seu teste para usar primeiro afirmações de exceção mais explícitas.
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 MSTEST0058
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0058
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0058.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.