Compartir vía


MSTEST0038: No use 'Assert.AreSame' o 'Assert.AreNotSame' con tipos de valor

Propiedad Valor
Identificador de la regla MSTEST0038
Título No utilice 'Assert.AreSame' ni 'Assert.AreNotSame' con tipos de valores
Categoría Uso
La corrección es problemática o no problemática Poco problemático
Habilitado por defecto
Gravedad predeterminada Advertencia
Introducido en la versión 3.8.0
Hay una corrección de código

Causa

El uso de Assert.AreSame o Assert.AreNotSame cuando uno o ambos argumentos son un tipo de valor.

Descripción de la regla

Assert.AreSame y Assert.AreNotSame funcionan comparando la referencia de los argumentos expected/notExpected indicados y los reales a través de ReferenceEquals. Por lo tanto, cuando se pasa un tipo de valor, se almacena con boxing.

Si usa AreSame, la aserción siempre fallará. Si usa AreNotSame, la aserción siempre será correcta.

Para AreSame, el único caso en que la aserción se cumple es si ambos argumentos son tipos de valor anulables cuyos valores son ambos nulos. En este caso, es más claro tener dos llamadas Assert.IsNull separadas.

Cómo corregir infracciones

Use Assert.AreEqual y Assert.AreNotEqual en lugar de Assert.AreSame y Assert.AreNotSame. Si se utiliza Assert.AreSame y ambos argumentos son tipos de valor que aceptan valores NULL y se espera que sean nulos, podría ser mejor realizar dos llamadas Assert.IsNull independientes en lugar de usar AreEqual, dependiendo de la intención de la prueba.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla. Si se omite esta regla, se producirá una aserción que siempre fallará o siempre será aprobada.