Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| 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.