Delen via


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.