Dela via


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.