Compartilhar via


MSTEST0038: não use 'Assert.AreSame' ou 'Assert.AreNotSame' com tipos de valor

Propriedade Valor
ID da regra MSTEST0038
Título Não use 'Assert.AreSame' ou 'Assert.AreNotSame' com tipos de valor
Categoria Uso
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão Sim
Gravidade padrão Aviso
Introduzido na versão 3.8.0
Há uma correção de código Sim

Causa

O uso de Assert.AreSame ou Assert.AreNotSame com um ou ambos argumentos como tipo de valor.

Descrição da regra

Assert.AreSame e Assert.AreNotSame funcionam comparando a referência dos expected/notExpected argumentos reais e fornecidos via ReferenceEquals. Portanto, quando você passa um tipo de valor, ele é demarcado.

Se estiver usando AreSame, a declaração sempre falhará. Se estiver usando AreNotSame, a declaração sempre será aprovada.

Para AreSame, o único caso em que a afirmação é aprovada é se ambos os argumentos forem tipos de valores anuláveis ​​cujos valores são ambos nulos. Nesse caso, fica mais claro ter duas chamadas Assert.IsNull separadas.

Como corrigir violações

Use Assert.AreEqual e Assert.AreNotEqual em vez de Assert.AreSame e Assert.AreNotSame. Se usar Assert.AreSame e ambos os argumentos forem tipos de valores anuláveis ​​cujos valores são esperados como nulos, dois Assert.IsNull separadas poderão ser mais adequadas do que AreEqual, dependendo da intenção do teste.

Quando suprimir avisos

Não suprima um aviso nessa regra. Ignorar essa regra resultará em uma afirmação que sempre falhará ou sempre será aprovada.