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 | 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.IsTrueAssert.IsFalseAssert.AreEqualAssert.AreNotEqualAssert.AreSameAssert.AreNotSameCollectionAssert.AreEqualCollectionAssert.AreNotEqualCollectionAssert.AreEquivalentCollectionAssert.AreNotEquivalentCollectionAssert.ContainsCollectionAssert.DoesNotContainCollectionAssert.AllItemsAreNotNullCollectionAssert.AllItemsAreUniqueCollectionAssert.AllItemsAreInstancesOfTypeCollectionAssert.IsSubsetOfCollectionAssert.IsNotSubsetOfStringAssert.ContainsStringAssert.StartsWithStringAssert.EndsWithStringAssert.MatchesStringAssert.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.