MSTEST0080: Använd CICondition-attribut i stället för miljökontroller

Property Value
Regel-ID MSTEST0080
Titel Använda CICondition-attribut i stället för miljökontroller
Kategori Usage
Korrigeringen är antingen brytande eller icke-brytande Oumbrytbar
Aktiverad som standard Yes
Standard allvarlighetsgrad Info
introducerades i version 4.4.0 (förhandsversion)
Finns det en kodkorrigering Ja, endast för C#

Orsak

En testmetods första instruktion null-kontrollerar resultatet av Environment.GetEnvironmentVariable("CI") och returnerar sedan antingen tidigt eller anrop Assert.Inconclusive, i stället för att använda [CICondition] attributet.

Regelbeskrivning

Testmetoder som null-kontrollerar CI miljövariabeln och sedan tidigt returnerar eller anropar Assert.Inconclusive bör använda [CICondition] attributet i stället. Attributet identifierar varje kontinuerlig integreringsprovider SOM MSTest känner till och rapporterar testet som överhoppat i stället för godkänt, vilket en tidig retur inte gör.

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

Analysatorn är avsiktligt begränsad till den allmänna användningsvariabeln CI som varje större provider anger. Ett skydd för en providerspecifik variabel, till exempel TF_BUILD, betyder "hoppa över Azure-pipelines", medan [CICondition] betyder "hoppa över någon CI", så analysatorn föreslår inte att en providerspecifik kontroll ersätts.

Så här åtgärdar du överträdelser

Ersätt miljövariabelkontrollen med attributet [CICondition] .

[TestMethod]
[CICondition(ConditionMode.Include)]
public void TestMethod() { }

En C#-kodkorrigering ersätter skyddet med attributet åt dig. Visual Basic kod har den här diagnostiken men har ingen automatisk korrigering. Använd attributet för hand.

När du ska ignorera varningar

Du kan utelämna den här varningen om miljökontrollen är mer komplex än en enkel null-kontroll med första instruktionen, eller om du behöver villkorsstyrd logik som [CICondition] inte kan uttryckas.

Undertryck en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable MSTEST0080
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0080

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.MSTEST0080.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även