Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
MSTest-analyseregels ('MSTESTxxxx') inspecteren uw C# of Visual Basic-code voor beveiliging, prestaties, ontwerp en andere problemen.
Aanbeveling
Wanneer u gebruikmaakt van Visual Studio, hebben veel analyseregels gekoppelde code-hervormingen die u kunt toepassen om het probleem op te lossen. Codecorrecties worden weergegeven in het pictogrammenu van de gloeilamp.
De regels zijn ingedeeld in categorieën zoals prestatiegebruik...
Vanaf MSTest.TestFramework 3.7 is het NUGet-pakket MSTest.Analyzers een afhankelijkheid van het framework. Voor eerdere versies moet u MSTest metapackage gebruiken of een pakketverwijzing voor MSTest.Analyzers expliciet toevoegen.
MSTestAnalyseModus
Vanaf MSTest 3.8 is een MSBuild-eigenschap met de naam MSTestAnalysisMode beschikbaar om te bepalen welke analysen zijn ingeschakeld op welke ernst.
Aanbeveling
Als u wilt zien welke regels zijn ingeschakeld op welke ernst voor elke modus, kunt u naar het pakket van de gewenste versie in De NuGet-cache navigeren, de globalconfigs map zoeken en het .globalconfig bestand openen dat overeenkomt met de analysemodus.
Voor meer informatie over het vinden van de NuGet-cachemap, zie De globale pakketten, cache en tijdelijke mappen beheren. Zoek vanuit die directory de map mstest.analyzers, vervolgens de versie (3.8 of hoger), en daarna globalconfigs.
U kunt ook het NuGet-pakket van de gewenste nuget.org versie downloaden en bekijken in NuGet Package Explorer (Windows-app) of rechtstreeks bekijken in de web-appversie van NuGet Package Explorer.
De beschikbare waarden voor deze eigenschap:
None
Met deze waarde worden alle analyses ingesteld op none ernst, waardoor ze allemaal worden uitgeschakeld. Vervolgens kunt u afzonderlijke analyses inschakelen met behulp van .editorconfig- of .globalconfig-bestanden.
Default
Deze instelling volgt het standaard gedocumenteerde gedrag voor elke regel.
- Voor regels die standaard zijn ingeschakeld, wordt de standaard ernst gebruikt.
- Regels die standaard zijn uitgeschakeld, hebben de ernstniveau
none.
Notitie
Regels die standaard zijn ingeschakeld als waarschuwingen zijn schendingen die naar verwachting tijdens runtime problemen veroorzaken.
Recommended
Dit is de modus die de meeste ontwikkelaars naar verwachting zullen gebruiken. Regels die standaard zijn ingeschakeld en de ernst 'info' (suggestion) hebben, worden geëscaleerd naar waarschuwingen. De volgende regels worden geëscaleerd naar fouten in beide Recommended en All modi's:
- MSTEST0003: Testmethoden moeten een geldige indeling hebben.
- MSTEST0043: Gebruik het retry-attribuut op testmethode.
All
Deze modus is agressiever dan Recommended. Alle regels worden ingeschakeld als waarschuwingen. Daarnaast worden de volgende regels geëscaleerd naar fouten:
- MSTEST0003: Testmethoden moeten een geldige indeling hebben.
- MSTEST0043: Gebruik het retry-attribuut op testmethode.
Notitie
De volgende regels zijn volledig optioneel en zijn niet ingeschakeld in de Default, Recommendedof All-modussen:
- MSTEST0015: Testmethode mag niet worden genegeerd
- MSTEST0019: Geef de voorkeur aan TestInitialize-methoden boven constructors
- MSTEST0020: Geef de voorkeur aan constructors (constructeurs) boven TestInitialize-methoden
- MSTEST0021: Geef de voorkeur aan Dispose boven TestCleanup-methoden
- MSTEST0022: Prefer TestCleanup boven Dispose-methoden
Regels per categorie
De analyseregels zijn ingedeeld in de volgende categorieën:
Ontwerpregels
Met ontwerpregels kunt u testsuites maken en onderhouden die voldoen aan de juiste ontwerp- en goede procedures.
Regels voor prestaties
Prestatieregels bieden ondersteuning voor high-performance testen.
Onderdrukkingsregels
Onderdrukkingsregels ondersteunen het onderdrukken van diagnostische gegevens van andere regels.
Gebruiksregels
Gebruiksregels ondersteunen het juiste gebruik van MSTest.
Regels op basis van concept
Regels zoeken die zijn ingedeeld op basis van veelvoorkomende testscenario's en concepten:
Structuur en kenmerken testen
Regels waarmee u ervoor kunt zorgen dat uw testklassen en -methoden goed zijn gestructureerd en ingericht:
- MSTEST0002 - Testklasse moet geldig zijn
- MSTEST0003 - Testmethode moet geldig zijn
- MSTEST0004 - Openbare typen moeten testklassen zijn
- MSTEST0007 - Kenmerk gebruiken voor testmethode
- MSTEST0016 - Testklasse moet een testmethode hebben
- MSTEST0029 - Openbare methode moet een testmethode zijn
- MSTEST0030 - Type met testmethode moet een testklasse zijn
- MSTEST0036 - Geen schaduw gebruiken
- MSTEST0041 - Kenmerken op basis van voorwaarden gebruiken met testklasse
- MSTEST0044 - Geef de voorkeur aan TestMethod boven DataTestMethod
- MSTEST0056 - TestMethodAttribute moet DisplayName correct instellen
- MSTEST0057 - TestMethodAttribute moet broninformatie doorgeven
- MSTEST0060 - Dubbele TestMethodAttribute
- MSTEST0063 - Testklasse moet een geldige constructor hebben
-
MSTEST0069 - Overgenomen
[TestClass]wordt genegeerd door de MSTest-brongenerator - MSTEST0071 - Testmethode mag geen weergavenaam opgeven die gelijk is aan de naam
-
MSTEST0072 -
[AssemblyFixtureProvider]wordt niet ondersteund bij ahead-of-time-compilatie -
-
[DependsOn]MSTEST0078 argumenten moeten geldig zijn -
-
[TestFilterProvider]MSTEST0081 moet verwijzen naar een geldig testfiltertype - MSTEST0082 : een testklasse neemt een levenscyclus of testmethode over van een andere MSTest-versie
Verwante documentatie: Tests schrijven met MSTest
Async/await-patronen
Regels voor het correct schrijven van asynchrone testcode:
- MSTEST0013 - AssemblyCleanup moet geldig zijn (inclusief asynchrone regels)
- MSTEST0027 - Asynchroon achtervoegsel onderdrukken voor testmethoden
- MSTEST0028 - Async-suffix onderdrukken voor testfixturemethoden
- MSTEST0039 - Nieuwere Assert.Throws-methoden (asynchrone varianten) gebruiken
- MSTEST0040 - Vermijd het gebruik van asserties in asynchrone void-context
- MSTEST0045 - Gebruik coöperatieve annulering voor time-out
- MSTEST0049 - Geef de TestContext-CancellationToken door
- MSTEST0054 - Eigenschap CancellationToken gebruiken
- MSTEST0064 - Voorkeur voor asynchrone assertiemethoden
- MSTEST0067 - Vermijd synchrone blokkering van aanroepen in testcode
Verwante documentatie: TestContext
Gegevensgestuurd testen
Regels voor het werken met gegevensgestuurde testscenario's:
- MSTEST0007 - Kenmerk gebruiken voor testmethode
- MSTEST0014 - DataRow moet geldig zijn
- MSTEST0018 - DynamicData moet geldig zijn
- MSTEST0042 - Duplicaat van DataRow
- MSTEST0052 - Expliciet DynamicDataSourceType vermijden
- MSTEST0062 - Testmethodeparameters voor out/ref vermijden
Gerelateerde documentatie: Gegevensgestuurde tests
Levenscyclus en initialisatie
Regels voor het initialiseren, opschonen en levenscyclusbeheer van tests:
- MSTEST0008 - TestInitialize moet geldig zijn
- MSTEST0009 - TestCleanup moet geldig zijn
- MSTEST0010 - ClassInitialize moet geldig zijn
- MSTEST0011 - ClassCleanup moet geldig zijn
- MSTEST0012 - AssemblyInitialize moet geldig zijn
- MSTEST0013 - AssemblyCleanup moet geldig zijn
- MSTEST0019 - Gebruik "TestInitialize" in plaats van constructors
- MSTEST0020 - Verkies constructors boven TestInitialize
- MSTEST0021 - Geef de voorkeur aan Dispose boven TestCleanup
- MSTEST0022 - Geef de voorkeur aan TestCleanup boven Dispose
- MSTEST0034 - ClassCleanupBehavior.EndOfClass gebruiken
- MSTEST0047 : IDE0060 onderdrukken voor ongebruikte TestContext-parameter bij initialisatie- en opschoningsmethoden
- MSTEST0050 - Globale testinrichting moet geldig zijn
-
-
[Ignore]MSTEST0066 een reden moet opgeven
Verwante documentatie: Levenscyclus
Assertions
Regels voor het correct en effectief gebruiken van assertiemethoden:
- MSTEST0006 - Kenmerk ExpectedException vermijden
- MSTEST0014 - DataRow moet geldig zijn
- MSTEST0017 - Assertie-argumenten moeten in de juiste volgorde worden doorgegeven
- MSTEST0023 - Maak de booleaanse assertie niet negatief
- MSTEST0025 - Geef de voorkeur aan Assert.Fail boven altijd-valse condities
- MSTEST0026 - Bewerings args moeten voorwaardelijke toegang voorkomen
- MSTEST0032 - Beoordeel assertie die altijd waar is
- MSTEST0037 : de juiste assertiemethoden gebruiken
- MSTEST0038 - Vermijd Assert.AreSame met waardetypen
- MSTEST0039 - Nieuwere Assert.Throws-methoden gebruiken
- MSTEST0046 - Assert gebruiken in plaats van StringAssert
- MSTEST0051 - Assert.Throws moet één instructie bevatten
- MSTEST0053 - Vermijd opmaakparameters voor Assert
- MSTEST0058 - Vermijd asserties in vangstblokken
- MSTEST0064 - Voorkeur voor asynchrone assertiemethoden
- MSTEST0065 - Vermijd Assert.AreEqual voor verzamelingstypen
- MSTEST0068 - Assert gebruiken in plaats van CollectionAssert
Verwante documentatie: Asserties
TestContext
Regels voor het correct gebruiken van het TestContext-object:
- MSTEST0005 - TestContext moet geldig zijn
- MSTEST0024 - Statische TestContext niet opslaan
- MSTEST0033 : niet-null-verwijzing onderdrukken die niet is geïnitialiseerd
- MSTEST0047 : IDE0060 onderdrukken voor de parameter TestContext
- MSTEST0048 - Gebruik van de eigenschap TestContext
- MSTEST0049 - Geef de TestContext-CancellationToken door
- MSTEST0054 - Eigenschap CancellationToken gebruiken
Verwante documentatie: TestContext
Parallelle testveiligheid
Regels die parallelle tests helpen bij het coördineren van gedeelde resources en het voorkomen van procesbrede status:
-
MSTEST0073 - Gebruik bij voorkeur een constante voor de
[ResourceLock]resourcesleutel - MSTEST0074 - Een test die de procesglobale status wijzigt, moet een resourcevergrendeling declareren
- MSTEST0075 : vermijd het wijzigen van de huidige map in een geparallelliseerde test
- MSTEST0076 - Vermijd het wijzigen van de procesbrede cultuur in een geparalleliseerde test
- MSTEST0077 - Vermijd geharde of gedeelde bestandssysteempaden in een geparallelliseerde test
Verwante documentatie: Uitvoering en beheer testen, TestContext
Testconfiguratie
Regels voor het configureren van testuitvoering, parallelle uitvoering en andere testinstellingen:
- MSTEST0001 - Kenmerk Parallelliseren gebruiken
- MSTEST0015 - Testmethode mag niet worden genegeerd
- MSTEST0031 - System.ComponentModel.DescriptionAttribute niet gebruiken
- MSTEST0035 - DeploymentItem gebruiken met testmethode of testklasse
- MSTEST0043 - Kenmerk voor opnieuw proberen gebruiken bij testmethode
- MSTEST0045 - Gebruik coöperatieve annulering voor time-out
- MSTEST0055 - Retourwaarde tekenreeksmethode niet negeren
- MSTEST0059 : het kenmerk Parallelliseren juist gebruiken
- MSTEST0061 - OsCondition-kenmerk gebruiken in plaats van runtimecontrole
-
-
[MemberCondition]MSTEST0070 argumenten moeten geldig zijn -
MSTEST0072 -
[AssemblyFixtureProvider]wordt niet ondersteund bij ahead-of-time-compilatie -
-
[DependsOn]MSTEST0078 argumenten moeten geldig zijn - MSTEST0079 - Kenmerk ArchitectureCondition gebruiken in plaats van runtimecontroles
- MSTEST0080 - CICondition-kenmerk gebruiken in plaats van omgevingscontroles
-
-
[TestFilterProvider]MSTEST0081 moet verwijzen naar een geldig testfiltertype - MSTEST0082 : een testklasse neemt een levenscyclus of testmethode over van een andere MSTest-versie
-
MSTEST0083 - Gebruik
[ExecutableCondition]in plaats vanFile.Exists-controles vóórProcess.Start
Verwante documentatie: MSTest configureren, Tests uitvoeren
Alle regels (snelverwijzing)
| Regel-id | Categorie | Title | Standaard ernst |
|---|---|---|---|
| MSTEST0001 | Performance | Gebruik het attribuut Parallelliseren | Informatie |
| MSTEST0002 | Usage | Testklasse moet geldig zijn | Waarschuwing |
| MSTEST0003 | Usage | Testmethode moet geldig zijn | Waarschuwing → fout* |
| MSTEST0004 | Design | Openbare typen moeten testklassen zijn | Informatie |
| MSTEST0005 | Usage | TestContext moet geldig zijn | Waarschuwing |
| MSTEST0006 | Design | Vermijd het kenmerk ExpectedException | Informatie |
| MSTEST0007 | Usage | Kenmerk gebruiken voor testmethode | Waarschuwing |
| MSTEST0008 | Usage | TestInitialize moet geldig zijn | Waarschuwing |
| MSTEST0009 | Usage | TestCleanup moet geldig zijn | Waarschuwing |
| MSTEST0010 | Usage | ClassInitialize moet geldig zijn | Waarschuwing |
| MSTEST0011 | Usage | ClassCleanup moet geldig zijn | Waarschuwing |
| MSTEST0012 | Usage | AssemblyInitialize moet geldig zijn | Waarschuwing |
| MSTEST0013 | Usage | AssemblyCleanup moet geldig zijn | Waarschuwing |
| MSTEST0014 | Usage | DataRow moet geldig zijn | Waarschuwing |
| MSTEST0015 | Design | Testmethode mag niet worden genegeerd | Geen (opt-in) |
| MSTEST0016 | Design | Testklasse moet een testmethode hebben | Informatie |
| MSTEST0017 | Usage | Assertieargumenten moeten in de juiste volgorde worden doorgegeven | Informatie |
| MSTEST0018 | Usage | DynamicData moet geldig zijn | Waarschuwing |
| MSTEST0019 | Design | Geef de voorkeur aan TestInitialize boven constructors | Geen (opt-in) |
| MSTEST0020 | Design | Geef de voorkeur aan constructors boven TestInitialize | Geen (opt-in) |
| MSTEST0021 | Design | Geef de voorkeur aan Dispose boven TestCleanup | Geen (opt-in) |
| MSTEST0022 | Design | Geef de voorkeur aan TestCleanup over Verwijdering | Geen (opt-in) |
| MSTEST0023 | Usage | Negateer geen Booleaanse assertie | Informatie |
| MSTEST0024 | Usage | Sla statische TestContext niet op | Waarschuwing |
| MSTEST0025 | Design | Prefer Assert.Fail over altijd-onjuiste condities | Informatie |
| MSTEST0026 | Usage | Assertie args moeten voorwaardelijke toegang voorkomen | Informatie |
| MSTEST0027 | Suppression | Asynchroon achtervoegsel onderdrukken voor testmethoden | N/A |
| MSTEST0028 | Suppression | Asynchroon achtervoegsel onderdrukken voor testinrichtingsmethoden | N/A |
| MSTEST0029 | Design | Openbare methode moet een testmethode zijn | Informatie |
| MSTEST0030 | Usage | Het type met de testmethode dient een testklasse te zijn | Waarschuwing |
| MSTEST0031 | Usage | System.ComponentModel.DescriptionAttribute niet gebruiken | Informatie |
| MSTEST0032 | Usage | Altijd waar-assertie controleren | Informatie |
| MSTEST0033 | Suppression | Niet-null-verwijzing onderdrukken die niet is geïnitialiseerd | N/A |
| MSTEST0034 | Usage | ClassCleanupBehavior.EndOfClass gebruiken | Informatie |
| MSTEST0035 | Usage | DeploymentItem gebruiken met testmethode of testklasse | Informatie |
| MSTEST0036 | Design | Geen schaduw gebruiken | Waarschuwing |
| MSTEST0037 | Usage | De juiste assertiemethoden gebruiken | Informatie |
| MSTEST0038 | Usage | Vermijd Assert.AreSame met waardetypen | Informatie |
| MSTEST0039 | Usage | Nieuwere Assert.Throws-methoden gebruiken | Informatie |
| MSTEST0040 | Usage | Vermijd het gebruik van asserts in een async void context | Waarschuwing |
| MSTEST0041 | Usage | Op voorwaarden gebaseerde kenmerken gebruiken met testklasse | Waarschuwing |
| MSTEST0042 | Usage | Dubbele GegevensRij | Waarschuwing |
| MSTEST0043 | Usage | Kenmerk voor opnieuw proberen gebruiken voor testmethode | Waarschuwing → fout* |
| MSTEST0044 | Design | Geef de voorkeur aan TestMethod boven DataTestMethod | Informatie |
| MSTEST0045 | Design | Gebruik coöperatieve annulering voor timeout | Informatie |
| MSTEST0046 | Usage | Assert gebruiken in plaats van StringAssert | Informatie |
| MSTEST0047 | Suppression | IDE0060 onderdrukken voor de parameter 'TestContext' | N/A |
| MSTEST0048 | Usage | Gebruik van eigenschap TestContext | Waarschuwing |
| MSTEST0049 | Usage | Flow TestContext Annuleringstoken | Informatie |
| MSTEST0050 | Usage | Globale testopstelling dient geldig te zijn | Waarschuwing |
| MSTEST0051 | Usage | Assert.Throws moet één instructie bevatten | Informatie |
| MSTEST0052 | Usage | Vermijd expliciet DynamicDataSourceType | Informatie |
| MSTEST0053 | Usage | Vermijd formatparameters voor Assert | Informatie |
| MSTEST0054 | Usage | De eigenschap CancellationToken gebruiken | Informatie |
| MSTEST0055 | Usage | Negeer de retourwaarde van de stringmethode niet | Waarschuwing |
| MSTEST0056 | Usage | TestMethodAttribute moet DisplayName correct instellen | Informatie |
| MSTEST0057 | Usage | TestMethodAttribute moet broninformatie doorgeven | Waarschuwing |
| MSTEST0058 | Usage | Vermijd asserties in vangstblokken | Informatie |
| MSTEST0059 | Usage | Het kenmerk Parallelliseren correct gebruiken | Waarschuwing |
| MSTEST0060 | Usage | Dubbele TestMethod-kenmerk | Waarschuwing |
| MSTEST0061 | Usage | OsCondition-kenmerk gebruiken in plaats van runtimecontrole | Informatie |
| MSTEST0062 | Usage | Testmethodeparameters voor out/ref vermijden | Waarschuwing |
| MSTEST0063 | Usage | Testklasse moet een geldige constructor hebben | Waarschuwing |
| MSTEST0064 | Usage | Geef de voorkeur aan asynchrone assertiemethoden | Informatie |
| MSTEST0065 | Usage | Vermijd Assert.AreEqual bij verzamelingstypen |
Waarschuwing |
| MSTEST0066 | Design |
[Ignore] moet een reden opgeven |
Informatie |
| MSTEST0067 | Usage | Vermijd synchrone blokkering van aanroepen in testcode | Info (standaard uitgeschakeld) |
| MSTEST0068 | Usage | Gebruik Assert in plaats van CollectionAssert |
Informatie |
| MSTEST0069 | Usage | Geërfd [TestClass] wordt genegeerd door de MSTest-sourcegenerator |
Waarschuwing |
| MSTEST0070 | Usage |
[MemberCondition] argumenten moeten geldig zijn |
Waarschuwing |
| MSTEST0071 | Usage | Testmethode mag geen weergavenaam opgeven die gelijk is aan de naam | Informatie |
| MSTEST0072 | Usage |
[AssemblyFixtureProvider] wordt niet ondersteund bij ahead-of-time-compilatie |
Waarschuwing |
| MSTEST0073 | Usage | Gebruik bij voorkeur een constante voor de [ResourceLock] resourcesleutel |
Informatie |
| MSTEST0074 | Usage | Test dat procesglobale toestand wijzigt, moet een resourcevergrendeling declareren | Informatie |
| MSTEST0075 | Usage | Vermijd het wijzigen van de huidige map in een parallelle test | Informatie |
| MSTEST0076 | Usage | Vermijd het wijzigen van de cultuur voor het hele proces in een geparalleliseerde test | Informatie |
| MSTEST0077 | Usage | Vermijd geharde of gedeelde bestandssysteempaden in een geparallelliseerde test | Informatie |
| MSTEST0078 | Usage |
[DependsOn] argumenten moeten geldig zijn |
Waarschuwing |
| MSTEST0079 | Usage | Het kenmerk ArchitectureCondition gebruiken in plaats van runtimecontroles | Informatie |
| MSTEST0080 | Usage | CiCondition-kenmerk gebruiken in plaats van omgevingscontroles | Informatie |
| MSTEST0081 | Usage |
[TestFilterProvider] moet verwijzen naar een geldig testfiltertype |
Waarschuwing |
| MSTEST0082 | Usage | Een testklasse neemt een levenscyclus of testmethode over van een andere MSTest-versie | Waarschuwing |
| MSTEST0083 | Usage | Gebruik [ExecutableCondition] in plaats van File.Exists-controles vóór Process.Start |
Informatie |
* Geëscaleerd naar Fout in de Recommended- en All-modus.
MSTESTEXP
Verschillende API's van MSTest zijn voorzien van de ExperimentalAttribute. Dit kenmerk geeft aan dat de API experimenteel is en kan worden verwijderd of gewijzigd in toekomstige versies van MSTest. Het kenmerk wordt gebruikt om API's te identificeren die nog niet stabiel zijn en mogelijk niet geschikt zijn voor productiegebruik.
De MSTESTEXP diagnostische waarschuwing geeft een melding van het gebruik van een experimentele API in uw code. Als u deze diagnose wilt onderdrukken met de SuppressMessageAttribute, voegt u de volgende code toe aan uw project:
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("MSTESTEXP", "Justification")]
U kunt deze diagnose ook onderdrukken met preprocessorrichtlijn door de volgende code toe te voegen aan uw project:
#pragma warning disable MSTESTEXP
// API that is causing the warning.
#pragma warning restore MSTESTEXP