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 | Sí |
Gravedad predeterminada | Advertencia |
Introducido en la versión | 3.8.0 |
Hay una corrección de código | Sí |
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.