MSTest-kodanalys

MSTest-analysregler ("MSTESTxxxx") kontrollerar din C#- eller Visual Basic-kod för säkerhet, prestanda, design och andra problem.

Tips

Om du använder Visual Studio har många analysregler associerade kodkorrigeringar som du kan använda för att åtgärda problemet. Kodkorrigeringar visas i menyn med glödlampans ikon.

Reglerna är ordnade i kategorier som prestandaanvändning...

Från och med MSTest.TestFramework 3.7 är NUGet-paketet MSTest.Analyzeers ett beroende av ramverket. För tidigare versioner måste du använda MSTest metapaket eller lägga till en paketreferens för MSTest.Analyzers explicit.

MSTestAnalysisMode (på engelska)

Från och med MSTest 3.8 är en MSBuild-egenskap med namnet MSTestAnalysisMode tillgänglig för att avgöra vilka analysverktyg som är aktiverade med vilken allvarlighetsgrad.

Tips

Om du vill se vilka regler som är aktiverade med vilken allvarlighetsgrad för varje läge kan du navigera till paketet med den aktuella versionen i NuGet-cachen, leta upp katalogen globalconfigs och öppna den .globalconfig fil som motsvarar analysläget. Mer information om hur du hittar NuGet-cachekatalogen finns i Hantera globala paket, cacheminnen och temporära mappar. Leta rätt på mstest.analyzers-katalogen i den aktuella katalogen, sedan versionen (3.8 och senare), och därefter globalconfigs. Du kan också ladda ned NuGet-paketet för den aktuella versionen från nuget.org och visa det i NuGet Package Explorer (Windows-app) eller visa det direkt i webbappsversionen av NuGet Package Explorer.

Tillgängliga värden för den här egenskapen:

None

Det här värdet ställer in alla analysverktyg på none allvarlighetsgrad och inaktiverar alla. Du kan sedan aktivera enskilda analysverktyg med hjälp av .editorconfig eller .globalconfig filer.

Default

Den här inställningen följer det dokumenterade standardbeteendet för varje regel.

  • Regler som är aktiverade som standard använder sin standard allvarlighetsgrad.
  • Regler som är inaktiverade som standard använder none allvarlighetsgrad.

Anmärkning

Regler som är aktiverade som standard som varningar är överträdelser som förväntas orsaka problem vid körning.

Det här är det läge som de flesta utvecklare förväntas använda. Regler som är aktiverade som standard med allvarlighetsgraden Info (suggestion) eskaleras till varningar. Följande regler eskaleras till fel i både Recommended-lägena och All-lägena.

All

Det här läget är mer aggressivt än Recommended. Alla regler är aktiverade som varningar. Dessutom eskaleras följande regler till fel:

Regler efter kategori

Analysreglerna är indelat i följande kategorier:

Designregler

Designregler hjälper dig att skapa och underhålla testsviter som följer rätt design och god praxis.

Prestandaregler

Prestandaregler stöder testning med höga prestanda.

Regler för undertryckning

Undertryckningsregler stödjer undertryckande av diagnostik från andra regler.

Användningsregler

Användningsregler stöder korrekt användning av MSTest.

Regler efter begrepp

Hitta regler ordnade efter vanliga testscenarier och begrepp:

Testa struktur och attribut

Regler som hjälper dig att se till att dina testklasser och metoder är korrekt strukturerade och dekorerade:

  • MSTEST0002 – Testklassen ska vara giltig
  • MSTEST0003 – Testmetoden ska vara giltig
  • MSTEST0004 – Offentliga typer ska vara testklasser
  • MSTEST0007 – Använd attributet på testmetoden
  • MSTEST0016 – Testklassen ska ha testmetod
  • MSTEST0029 – Offentlig metod ska vara testmetod
  • MSTEST0030 – Typ som innehåller testmetoden ska vara en testklass
  • MSTEST0036 – Använd inte skuggning
  • MSTEST0041 – Använda villkorsbaserade attribut med testklass
  • MSTEST0044 – Föredrar TestMethod framför DataTestMethod
  • MSTEST0056 – TestMethodAttribute bör ange DisplayName korrekt
  • MSTEST0057 – TestMethodAttribute bör sprida källinformation
  • MSTEST0060 – Duplicerad TestMethodAttribute
  • MSTEST0063 – Testklassen ska ha en giltig konstruktor
  • MSTEST0069 – Ärvd [TestClass] ignoreras av MSTest-källgeneratorn
  • MSTEST0071 – Testmetoden bör inte ange ett visningsnamn som är lika med namnet
  • - [AssemblyFixtureProvider] MSTEST0072 stöds inte med kompilering i förväg
  • - [DependsOn] MSTEST0078 argumenten ska vara giltiga
  • - [TestFilterProvider] MSTEST0081 bör referera till en giltig testfiltertyp
  • MSTEST0082 – En testklass ärver en livscykel eller testmetod från en annan MSTest-version

Relaterad dokumentation: Skriva tester med MSTest

Async/await-mönster

Regler för att skriva asynkron testkod korrekt:

  • MSTEST0013 – AssemblyCleanup ska vara giltigt (inkluderar asynkrona regler)
  • MSTEST0027 – Utelämna asynkront suffix för testmetoder
  • MSTEST0028 – Utelämna asynkront suffix för testfixturmetoder
  • MSTEST0039 – Använd nyare Assert.Throws-metoder (asynkrona varianter)
  • MSTEST0040 – Undvik att använda asserts i asynkron void-kontekst
  • MSTEST0045 – Använd kooperativ annullering för timeout
  • MSTEST0049 – Flow TestContext CancellationToken
  • MSTEST0054 – Använd egenskapen CancellationToken
  • MSTEST0064 – Föredrar asynkrona kontrollmetoder
  • MSTEST0067 – Undvik synkront blockerande anrop i testkoden

Relaterad dokumentation: TestContext

Datadriven testning

Regler för att arbeta med datadrivna testscenarier:

Relaterad dokumentation: Datadriven testning

Livscykel och initiering

Regler för testinitiering, rensning och livscykelhantering:

  • MSTEST0008 – TestInitialize ska vara giltigt
  • MSTEST0009 – TestCleanup ska vara giltigt
  • MSTEST0010 – ClassInitialize ska vara giltigt
  • MSTEST0011 – ClassCleanup ska vara giltigt
  • MSTEST0012 – AssemblyInitialize ska vara giltigt
  • MSTEST0013 – AssemblyCleanup ska vara giltigt
  • MSTEST0019 – Föredrar TestInitialisera framför konstruktorer
  • MSTEST0020 – Föredrar konstruktorer framför TestInitialize
  • MSTEST0021 – Föredra Dispose framför TestCleanup
  • MSTEST0022 – Föredra TestCleanup framför Dispose
  • MSTEST0034 – Använd ClassCleanupBehavior.EndOfClass
  • MSTEST0047 – Utelämna IDE0060 för oanvänd TestContext-parameter vid initiering och rensning av metoder
  • MSTEST0050 – Den globala testfixturen ska vara giltig
  • - [Ignore] MSTEST0066 ska ange en motivering

Relaterad dokumentation: Livscykel

Assertions

Regler för att använda kontrollmetoder korrekt och effektivt:

  • MSTEST0006 – Undvik attributet ExpectedException
  • MSTEST0014 – DataRow ska vara giltigt
  • MSTEST0017 – Påståendeargument bör skickas i rätt ordning
  • MSTEST0023 – Negera inte booleskt påstående
  • MSTEST0025 – Föredrar Assert.Fail framför villkor som alltid är falska
  • MSTEST0026 – Asserts args bör undvika villkorlig åtkomst
  • MSTEST0032 – Granska villkor för always-true-kontroll
  • MSTEST0037 – Använd rätt assertmetoder
  • MSTEST0038 – Undvik Assert.AreSame med värdetyper
  • MSTEST0039 – Använd nyare Assert.Throws-metoder
  • MSTEST0046 – Använd Assert i stället för StringAssert
  • MSTEST0051 – Assert.Throws ska innehålla en enda instruktion
  • MSTEST0053 – Undvik parametrar för Assert-format
  • MSTEST0058 – Undvik kontroller i fångstblock
  • MSTEST0064 – Föredrar asynkrona kontrollmetoder
  • MSTEST0065 - Undvik Assert.AreEqual för samlingstyper
  • MSTEST0068 – Använd Assert i stället för CollectionAssert

Relaterad dokumentation: Intyg

TestContext

Regler för korrekt användning av TestContext-objektet:

  • MSTEST0005 – TestContext ska vara giltigt
  • MSTEST0024 – Lagra inte statisk TestContext
  • MSTEST0033 – Ignorera icke-nullbar referens som inte initierats varning
  • MSTEST0047 – Utelämna IDE0060 för parametern TestContext
  • MSTEST0048 – TestContext-egenskapsanvändning
  • MSTEST0049 – Flow TestContext CancellationToken
  • MSTEST0054 – Använd egenskapen CancellationToken

Relaterad dokumentation: TestContext

Säkerhet vid parallellkörning av tester

Regler som hjälper parallella tester att samordna delade resurser och undvika processomfattande tillstånd:

  • MSTEST0073 – Föredrar en konstant för resursnyckeln [ResourceLock]
  • MSTEST0074 – Tester som muterar globalt processtillstånd bör deklarera ett resurslås
  • MSTEST0075 – Undvik att ändra den aktuella katalogen i ett parallelliserat test
  • MSTEST0076 – Undvik att mutera processomfattande kultur i ett parallelliserat test
  • MSTEST0077 – Undvik hårdkodade eller delade filsystemsökvägar i ett parallelliserat test

Relaterad dokumentation: Testkörning och kontroll, TestContext

Testkonfiguration

Regler för att konfigurera testkörning, parallellisering och andra testinställningar:

  • MSTEST0001 – Använd attributet Parallelize
  • MSTEST0015 – Testmetoden bör inte ignoreras
  • MSTEST0031 – Använd inte System.ComponentModel.DescriptionAttribute
  • MSTEST0035 – Använda DeploymentItem med testmetod eller testklass
  • MSTEST0043 – Använd återförsöksattribut på testmetoden
  • MSTEST0045 – Använd kooperativ annullering för timeout
  • MSTEST0055 – Ignorera inte strängmetodens returvärde
  • MSTEST0059 – Använd attributet Parallelize korrekt
  • MSTEST0061 – Använd OSCondition-attribut i stället för körningskontroll
  • - [MemberCondition] MSTEST0070 argumenten ska vara giltiga
  • - [AssemblyFixtureProvider] MSTEST0072 stöds inte med kompilering i förväg
  • - [DependsOn] MSTEST0078 argumenten ska vara giltiga
  • MSTEST0079 – Använd ArchitectureCondition-attributet i stället för körningskontroller
  • MSTEST0080 – Använda CICondition-attribut i stället för miljökontroller
  • - [TestFilterProvider] MSTEST0081 bör referera till en giltig testfiltertyp
  • MSTEST0082 – En testklass ärver en livscykel eller testmetod från en annan MSTest-version
  • MSTEST0083 – Använd [ExecutableCondition] i stället för File.Exists kontroller innan Process.Start

Relaterad dokumentation: Konfigurera MSTest, Köra tester

Alla regler (snabböversikt)

Regel-ID Kategori Titel Standard allvarlighetsgrad
MSTEST0001 Performance Använda attributet Parallelize Info
MSTEST0002 Usage Testklassen måste vara giltig Varning
MSTEST0003 Usage Testmetoden ska vara giltig Varning → Fel*
MSTEST0004 Design Offentliga typer bör betraktas som testklasser. Info
MSTEST0005 Usage TestContext ska vara giltigt Varning
MSTEST0006 Design Undvik attributet ExpectedException Info
MSTEST0007 Usage Använd attribut på testmetoden Varning
MSTEST0008 Usage TestInitialize ska vara giltigt Varning
MSTEST0009 Usage TestCleanup ska vara giltig Varning
MSTEST0010 Usage ClassInitialize ska vara giltigt Varning
MSTEST0011 Usage ClassCleanup ska vara giltigt Varning
MSTEST0012 Usage AssemblyInitialize ska vara giltigt Varning
MSTEST0013 Usage AssemblyCleanup ska vara giltigt Varning
MSTEST0014 Usage DataRow ska vara giltig Varning
MSTEST0015 Design Testmetoden bör inte ignoreras Ingen (valfritt)
MSTEST0016 Design Testklassen ska ha en testmetod Info
MSTEST0017 Usage Kontroll args bör skickas i rätt ordning Info
MSTEST0018 Usage DynamicData ska vara giltigt Varning
MSTEST0019 Design Föredrar TestInitialize framför konstruktorer Ingen (valfritt)
MSTEST0020 Design Föredrar konstruktorer framför TestInitialize Ingen (valfritt)
MSTEST0021 Design Föredrar att göra sig av med TestCleanup Ingen (valfritt)
MSTEST0022 Design Föredra TestCleanup framför Dispose Ingen (valfritt)
MSTEST0023 Usage Förneka inte boolesk försäkran Info
MSTEST0024 Usage Lagra inte statisk TestContext Varning
MSTEST0025 Design Föredrar Assert.Fail framför villkor som alltid är falska Info
MSTEST0026 Usage Påståenden Args bör undvika villkorlig åtkomst Info
MSTEST0027 Suppression Ignorera asynkront suffix för testmetoder N/A
MSTEST0028 Suppression Utelämna asynkront suffix för testfixturmetoder N/A
MSTEST0029 Design Offentlig metod ska vara testmetod Info
MSTEST0030 Usage Typ som innehåller testmetoden ska vara en testklass Varning
MSTEST0031 Usage Använd inte System.ComponentModel.DescriptionAttribute Info
MSTEST0032 Usage Granska villkor för always-true-kontroll Info
MSTEST0033 Suppression Ignorera icke-nullbar referens som inte initierats N/A
MSTEST0034 Usage Använd ClassCleanupBehavior.EndOfClass Info
MSTEST0035 Usage Använda DeploymentItem med testmetoden eller testklassen Info
MSTEST0036 Design Använd inte skuggning Varning
MSTEST0037 Usage Använd rätt assert-metoder Info
MSTEST0038 Usage Undvik Assert.AreSame med värdetyper Info
MSTEST0039 Usage Använd nyare Assert.Throws-metoder Info
MSTEST0040 Usage Undvik att använda asserts i asynkron void-context Varning
MSTEST0041 Usage Använda villkorsbaserade attribut med testklass Varning
MSTEST0042 Usage Duplicera DataRow Varning
MSTEST0043 Usage Använda återförsöksattribut för testmetoden Varning → Fel*
MSTEST0044 Design Föredrar TestMethod framför DataTestMethod Info
MSTEST0045 Design Använd kooperativ annullering för timeout Info
MSTEST0046 Usage Använd Assert i stället för StringAssert Info
MSTEST0047 Suppression Ignorera IDE0060 för parametern TestContext N/A
MSTEST0048 Usage TestContext-egenskapsanvändning Varning
MSTEST0049 Usage Flow-TestContext-CancellationToken Info
MSTEST0050 Usage Den globala testmiljön ska vara giltig Varning
MSTEST0051 Usage Assert.Throws ska innehålla en enda instruktion Info
MSTEST0052 Usage Undvik uttrycklig DynamicDataSourceType Info
MSTEST0053 Usage Undvik parametrar för Assert-format Info
MSTEST0054 Usage Använda egenskapen CancellationToken Info
MSTEST0055 Usage Ignorera inte strängmetodens returvärde Varning
MSTEST0056 Usage TestMethodAttribute ska korrekt sätta DisplayName Info
MSTEST0057 Usage TestMethodAttribute bör sprida källinformation Varning
MSTEST0058 Usage Undvik assertioner i fångstblock Info
MSTEST0059 Usage Använd attributet Parallelize korrekt Varning
MSTEST0060 Usage Duplicera TestMethodAttribute Varning
MSTEST0061 Usage Använd OSCondition-attributet istället för runtime-kontroll Info
MSTEST0062 Usage Undvik testmetodparametrar för out/ref Varning
MSTEST0063 Usage Testklassen ska ha en giltig konstruktor Varning
MSTEST0064 Usage Använd helst asynkrona asserteringsmetoder Info
MSTEST0065 Usage Undvik Assert.AreEqual på samlingstyper Varning
MSTEST0066 Design [Ignore] ska ange en motivering Info
MSTEST0067 Usage Undvik synkront blockerande anrop i testkoden Information (inaktiverad som standard)
MSTEST0068 Usage Använd Assert i stället för CollectionAssert Info
MSTEST0069 Usage Ärvd [TestClass] ignoreras av MSTest-källgeneratorn Varning
MSTEST0070 Usage [MemberCondition] argumenten ska vara giltiga Varning
MSTEST0071 Usage Testmetoden bör inte ange ett visningsnamn som är lika med namnet Info
MSTEST0072 Usage [AssemblyFixtureProvider] stöds inte med kompilering i förväg Varning
MSTEST0073 Usage Föredrar en konstant för resursnyckeln [ResourceLock] Info
MSTEST0074 Usage Tester som muterar processglobalt tillstånd bör deklarera ett resurslås Info
MSTEST0075 Usage Undvik att ändra den aktuella katalogen i ett parallelliserat test Info
MSTEST0076 Usage Undvik att mutera processomfattande kultur i ett parallelliserat test Info
MSTEST0077 Usage Undvik hårdkodade eller delade filsystemsökvägar i ett parallelliserat test Info
MSTEST0078 Usage [DependsOn] argumenten ska vara giltiga Varning
MSTEST0079 Usage Använd attributet ArchitectureCondition i stället för körningskontroller Info
MSTEST0080 Usage Använda CICondition-attribut i stället för miljökontroller Info
MSTEST0081 Usage [TestFilterProvider] bör referera till en giltig testfiltertyp Varning
MSTEST0082 Usage En testklass ärver en livscykel eller testmetod från en annan MSTest-version Varning
MSTEST0083 Usage Använd [ExecutableCondition] i stället File.Exists för kontroller innan Process.Start Info

* Eskalerade till Fel i Recommended och All lägen.

MSTESTEXP

Flera API:er för MSTest är dekorerade med ExperimentalAttribute. Det här attributet anger att API:et är experimentellt och kan tas bort eller ändras i framtida versioner av MSTest. Attributet används för att identifiera API:er som ännu inte är stabila och kanske inte är lämpliga för produktionsanvändning.

MSTESTEXP-diagnostikvarningen meddelar dig om användningen av en experimentell API i koden. Om du vill förhindra den här diagnostiken med SuppressMessageAttributelägger du till följande kod i projektet:

using System.Diagnostics.CodeAnalysis;

[assembly: SuppressMessage("MSTESTEXP", "Justification")]

Du kan också ignorera den här diagnostiken med förprocessordirektivet genom att lägga till följande kod i projektet:

#pragma warning disable MSTESTEXP
        // API that is causing the warning.
#pragma warning restore MSTESTEXP