Partilhar via


MSTEST0026: Evite o acesso condicional em asserções

Property valor
ID da regra MSTEST0026
Título Evitar acesso condicional em asserções
Categoria Utilização
A correção está quebrando ou não quebrando Sem quebra
Ativado por padrão Sim (de 3,5 a 3,7). Não (a partir de 3.8)
Severidade padrão Informações
Introduzido na versão 3.5.0
Existe uma correção de código Não

Motivo

Esta regra gera um diagnóstico quando um argumento que contém um operador(?.) condicional nulo ou ?[] é passado para os métodos de asserção abaixo:

  • Assert.IsTrue
  • Assert.IsFalse
  • Assert.AreEqual
  • Assert.AreNotEqual
  • Assert.AreSame
  • Assert.AreNotSame
  • CollectionAssert.AreEqual
  • CollectionAssert.AreNotEqual
  • CollectionAssert.AreEquivalent
  • CollectionAssert.AreNotEquivalent
  • CollectionAssert.Contains
  • CollectionAssert.DoesNotContain
  • CollectionAssert.AllItemsAreNotNull
  • CollectionAssert.AllItemsAreUnique
  • CollectionAssert.AllItemsAreInstancesOfType
  • CollectionAssert.IsSubsetOf
  • CollectionAssert.IsNotSubsetOf
  • StringAssert.Contains
  • StringAssert.StartsWith
  • StringAssert.EndsWith
  • StringAssert.Matches
  • StringAssert.DoesNotMatch

Descrição da regra

O objetivo das asserções em testes de unidade é verificar se certas condições são atendidas. Quando um operador de acesso condicional é usado em uma asserção, ele introduz uma condição adicional que pode ou não ser atendida, dependendo do estado do objeto que está sendo acessado. Isso pode levar a resultados de teste inconsistentes e tornar o teste menos claro.

Como corrigir violações

Certifique-se de que os argumentos não contenham (?.) ou ?[] sejam passados para os métodos de asserção. Em vez disso, execute verificações nulas antes de fazer a afirmação.

Company? company = GetCompany();
Assert.AreEqual("Contoso", company?.Name); // MSTEST0026
StringAssert.Contains(company?.Address, "Brazil"); // MSTEST0026

// Fixed code
Assert.IsNotNull(company);
Assert.AreEqual("Contoso", company.Name);
StringAssert.Contains(company.Address, "Brazil");

Quando suprimir avisos

Não recomendamos a supressão de avisos desta regra.

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 MSTEST0026
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0026

Para desabilitar a regra para um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração .

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

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