MSTEST0079: Het kenmerk ArchitectureCondition gebruiken in plaats van runtimecontroles

Property Waarde
Regel-ID MSTEST0079
Title Het kenmerk ArchitectureCondition gebruiken in plaats van runtimecontroles
Categorie Usage
Fix kan brekend of niet-brekend zijn Non-breaking
standaard ingeschakeld Yes
standaardniveau van ernst Informatie
geïntroduceerd in versie 4.4.0 (preview)
Is er een oplossing voor de code Ja, alleen voor C#

Oorzaak

De eerste instructie van een testmethode vergelijkt ProcessArchitecture met een Architecture waarde en retourneert vervolgens vroeg of aanroepen Assert.Inconclusive, in plaats van het kenmerk te [ArchitectureCondition] gebruiken.

Beschrijving van regel

Testmethoden die het kenmerk vergelijken RuntimeInformation.ProcessArchitecture en vervolgens vroeg retourneren of aanroepen Assert.Inconclusive , moeten in plaats daarvan het [ArchitectureCondition] kenmerk gebruiken. Het kenmerk is declaratief en detecteerbaar en rapporteert de test als overgeslagen in plaats van doorgegeven, wat een vroege terugkeer niet doet.

[TestMethod]
public void TestMethod()
{
    if (RuntimeInformation.ProcessArchitecture != Architecture.X64) return; // Violation
}

De analyzer herkent de bewaker alleen wanneer het de eerste instructie van de methode is, zonder else vertakking en wanneer het lid waarnaar wordt verwezen, een overeenkomende TestArchitecturesArchitecture vlag heeft.

Hoe schendingen op te lossen

Vervang de runtimecontrole door het [ArchitectureCondition] kenmerk.

[TestMethod]
[ArchitectureCondition(TestArchitectures.X64)]
public void TestMethod() { }

Een C#-codefix vervangt de beveiliging door het kenmerk voor u. Visual Basic code deze diagnose heeft, maar geen automatische oplossing heeft; pas het kenmerk handmatig toe.

Wanneer waarschuwingen onderdrukken

U kunt deze waarschuwing onderdrukken als uw runtimecontrole complexer is dan een eenvoudige first-statement guard of als u voorwaardelijke logica nodig hebt die [ArchitectureCondition] niet kan worden weergegeven.

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 MSTEST0079
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0079

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.MSTEST0079.severity = none

Zie Hoe u codeanalysewaarschuwingen kunt onderdrukken voor meer informatie.

Zie ook