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 | MSTEST0074 |
| Titel | Testa att mutera process-globalt tillstånd bör deklarera ett resurslås |
| 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# |
Important
ResourceLockAttribute är planerat för MSTest 4.4 och är endast tillgängligt i förhandsversioner tills MSTest 4.4.0 släpps.
Note
Den här analysatorn aktiveras endast när sammansättningsparallellisering är syntaktiskt aktiverad, till exempel utan [assembly: Parallelize] matchande [assembly: DoNotParallelize], eller när en .editorconfig fil anger mstest_parallel_safety_mode = always. Analysatorn kan inte identifiera parallellisering som endast är aktiverad via .runsettings eller MSBuild-egenskaper som MSTestParallelizeWorkers. Ange alternativet .editorconfig om du konfigurerar parallellisering på det sättet och ändå vill att den här analysatorn ska köras.
Orsak
Ett test, eller en matchningsmetod med klassomfattning som körs under, anropar Environment.SetEnvironmentVariable eller/Console.SetOutSetErrorSetIn/ utan matchning [ResourceLock] eller .[DoNotParallelize]
Regelbeskrivning
Att mutera process-globalt tillstånd, till exempel miljövariabler eller konsolomdirigering, från ett test är osäkert när parallellisering i sammansättning har aktiverats, eftersom ett syskontest som körs samtidigt observerar mutationen. Till skillnad från [ResourceLock], som inte öppnas när en nyckel glöms bort, flaggar den här regeln mutationen vid kompileringstiden.
[TestMethod]
public void SetsVariable()
{
Environment.SetEnvironmentVariable("MODE", "test"); // Violation
}
Så här åtgärdar du överträdelser
Deklarera [ResourceLock] med matchande WellKnownResources nyckel för att serialisera utmanande tester eller lägg till [DoNotParallelize] för att välja bort parallellisering.
[ResourceLock(WellKnownResources.EnvironmentVariables)]
[TestMethod]
public void SetsVariable()
{
Environment.SetEnvironmentVariable("MODE", "test");
}
En C#-kodkorrigering lägger till [ResourceLock] attributet åt dig, på testmetoden eller för en matchning med klassomfattning som [TestInitialize], i testklassen. Visual Basic kod har den här diagnostiken men har ingen automatisk korrigering. Lägg till attributet för hand.
När du ska ignorera varningar
Ignorera inte varningar från den här regeln utan att deklarera ett lås eller välja bort parallellisering, eftersom det gör att mutationen körs tyst mot tester som körs samtidigt.
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 MSTEST0074
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0074
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.MSTEST0074.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.