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.
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
noneallvarlighetsgrad.
Anmärkning
Regler som är aktiverade som standard som varningar är överträdelser som förväntas orsaka problem vid körning.
Recommended
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.
- MSTEST0003: Testmetoder bör ha en giltig layout.
- MSTEST0043: Använd återförsöksattribut på testmetoden.
All
Det här läget är mer aggressivt än Recommended. Alla regler är aktiverade som varningar. Dessutom eskaleras följande regler till fel:
- MSTEST0003: Testmetoder bör ha en giltig layout.
- MSTEST0043: Använd återförsöksattribut på testmetoden.
Anmärkning
Följande regler är helt opt-in och är inte aktiverade i Default, Recommendedeller All-läget:
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:
- MSTEST0007 – Använd attributet på testmetoden
- MSTEST0014 – DataRow ska vara giltigt
- MSTEST0018 – DynamicData ska vara giltigt
- MSTEST0042 – Duplicera DataRow
- MSTEST0052 – Undvik explicit DynamicDataSourceType
- MSTEST0062 – Undvik testmetodparametrar för out/ref
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örFile.Existskontroller innanProcess.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