Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| 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.