MSTEST0026: voorwaardelijke toegang voorkomen in asserties
Eigenschappen | Weergegeven als |
---|---|
Regel-id | MSTEST0026 |
Titel | Voorwaardelijke toegang voorkomen in asserties |
Categorie | Gebruik |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld | Ja (van 3,5 tot 3.7). Nee (beginnend met 3.8) |
Standaard ernst | Info |
Geïntroduceerd in versie | 3.5.0 |
Is er een codeoplossing | Nee |
Oorzaak
Deze regel genereert een diagnose wanneer een argument met een null-voorwaardelijke operator(?.)
of ?[]
wordt doorgegeven aan de onderstaande assertiemethoden:
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
Beschrijving van regel
Het doel van beweringen in eenheidstests is om te controleren of aan bepaalde voorwaarden wordt voldaan. Wanneer een operator voor voorwaardelijke toegang wordt gebruikt in een assertie, wordt er een aanvullende voorwaarde geïntroduceerd waaraan al dan niet wordt voldaan, afhankelijk van de status van het object dat wordt geopend. Dit kan leiden tot inconsistente testresultaten en het testen minder duidelijk maken.
Schendingen oplossen
Zorg ervoor dat argumenten niet bevatten (?.)
of ?[]
wanneer deze worden doorgegeven aan de assertiemethoden. Voer in plaats daarvan null-controles uit voordat u de assertie maakt.
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");
Wanneer waarschuwingen onderdrukken
Het wordt afgeraden waarschuwingen van deze regel te onderdrukken.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable MSTEST0026
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0026
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst ervan in op none
in het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0026.severity = none
Voor meer informatie, zie Hoe codeanalysewaarschuwingen te onderdrukken.