MSTEST0026: Undvik villkorlig åtkomst i kontroller
Property | Värde |
---|---|
Regel-ID | MSTEST0026 |
Title | Undvik villkorlig åtkomst i kontroller |
Kategori | Förbrukning |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard | Ja (från 3,5 till 3,7). Nej (börjar med 3,8) |
Standard allvarlighetsgrad | Info |
Introducerad i version | 3.5.0 |
Finns det en kodkorrigering | Nej |
Orsak
Den här regeln genererar en diagnostik när ett argument som innehåller en villkorsoperator(?.)
för null eller ?[]
skickas till försäkransmetoderna nedan:
Assert.IsTrue
Assert.IsFalse
Assert.AreEqual
Assert.AreNotEqual
Assert.AreSame
Assert.AreNotSame
CollectionAssert.AreEqual
CollectionAssert.AreNotEqual
CollectionAssert.AreEquivalent
CollectionAssert.AreNotEquivalent
CollectionAssert.Contains
CollectionAssert.DoesNotContain
CollectionAssert.AllItemsAreNotNull
CollectionAssert.AllItemsAreUnique
CollectionAssert.AllItemsAreInstancesOfType
CollectionAssert.IsSubsetOf
CollectionAssert.IsNotSubsetOf
StringAssert.Contains
StringAssert.StartsWith
StringAssert.EndsWith
StringAssert.Matches
StringAssert.DoesNotMatch
Regelbeskrivning
Syftet med försäkran i enhetstester är att kontrollera att vissa villkor är uppfyllda. När en operator för villkorsstyrd åtkomst används i en försäkran införs ytterligare ett villkor som kan eller inte kan uppfyllas, beroende på tillståndet för objektet som används. Detta kan leda till inkonsekventa testresultat och göra testet mindre tydligt.
Så här åtgärdar du överträdelser
Kontrollera att argumenten inte innehåller (?.)
eller ?[]
när de skickas till kontrollmetoderna. Utför i stället null-kontroller innan du gör försäkran.
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");
När du ska ignorera varningar
Vi rekommenderar inte att du utelämnar varningar från den här regeln.
Undertrycka en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable MSTEST0026
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0026
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0026.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.