MSTEST0080: CICondition-kenmerk gebruiken in plaats van omgevingscontroles

Property Waarde
Regel-ID MSTEST0080
Title CiCondition-kenmerk gebruiken in plaats van omgevingscontroles
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 controleert het resultaat van Environment.GetEnvironmentVariable("CI") en retourneert vervolgens vroeg of aanroepen Assert.Inconclusive, in plaats van het [CICondition] kenmerk te gebruiken.

Beschrijving van regel

Testmethoden die de CI omgevingsvariabele null-controleren en vervolgens vroeg retourneren of aanroepen Assert.Inconclusive , moeten in plaats daarvan het [CICondition] kenmerk gebruiken. Het kenmerk herkent elke continue integratieprovider WAAR MSTest over weet en rapporteert de test als overgeslagen in plaats van doorgegeven, wat een vroege terugkeer niet doet.

[TestMethod]
public void TestMethod()
{
    if (Environment.GetEnvironmentVariable("CI") is null) return; // Violation
}

De analyse is opzettelijk beperkt tot de variabele voor algemeen gebruik CI die door elke primaire provider wordt ingesteld. Een beveiliging voor een providerspecifieke variabele, zoals TF_BUILD, betekent 'skip on Azure-pipelines', terwijl [CICondition] 'skip on any CI' betekent, dus de analyzer stelt niet voor dat een providerspecifieke controle wordt vervangen.

Hoe schendingen op te lossen

Vervang de controle van de omgevingsvariabele door het [CICondition] kenmerk.

[TestMethod]
[CICondition(ConditionMode.Include)]
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 omgevingscontrole complexer is dan een eenvoudige null-controle van de eerste instructie of als u voorwaardelijke logica nodig hebt die [CICondition] 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 MSTEST0080
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0080

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

Zie Hoe u codeanalysewaarschuwingen kunt onderdrukken voor meer informatie.

Zie ook