MSTest-codeanalyse

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.

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:

All

Deze modus is agressiever dan Recommended. Alle regels worden ingeschakeld als waarschuwingen. Daarnaast worden de volgende regels geëscaleerd naar fouten:

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:

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 van File.Exists-controles vóór Process.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