Dela via


MSTEST0038: Använd inte Assert.AreSame eller Assert.AreNotSame med värdetyper

Egenskap Värde
regel-ID MSTEST0038
Rubrik Använd inte Assert.AreSame eller Assert.AreNotSame med värdetyper
Kategori Användning
Fixet är antingen brytande eller icke-brytande Icke-brytande
Aktiverad som standard Ja
Standard allvarlighetsgrad Varning
introducerades i version 3.8.0
Finns det en kodkorrigering Ja

Orsak

Användningen av Assert.AreSame eller Assert.AreNotSame där ett eller båda argumenten är en värdetyp.

Regelbeskrivning

Assert.AreSame och Assert.AreNotSame fungerar genom att jämföra referens för de angivna expected/notExpected och faktiska argument via ReferenceEquals. När du skickar en värdetyp är det därför rutad.

Om du använder AreSamekommer alltid assertionen att misslyckas. Om du använder AreNotSame, kommer påståendet alltid att godkännas.

För AreSameär det enda fallet när kontrollen skickas om båda argumenten är nullbara värdetyper vars värden båda är null. I det här fallet är det tydligare att ha två separata Assert.IsNull anrop.

Så här åtgärdar du överträdelser

Använd Assert.AreEqual och Assert.AreNotEqual i stället för Assert.AreSame och Assert.AreNotSame. Om användning av Assert.AreSame och båda argumenten är nullbara värdetyper vars värden förväntas vara null, kan två separata Assert.IsNull anrop passa bättre än AreEqual, beroende på avsikten med testet.

När du ska ignorera varningar

Ignorera inte en varning från den här regeln. Om du ignorerar den här regeln resulterar det i ett påstående som alltid misslyckas eller alltid lyckas.