Delen via


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 - Prefer TestMethod over DataTestMethod
  • MSTEST0056 - TestMethodAttribute moet DisplayName correct instellen
  • MSTEST0057 - TestMethodAttribute moet broninformatie doorgeven
  • MSTEST0060 - Dubbele TestMethodAttribute
  • MSTEST0063 - Testklasse moet een geldige constructor hebben

Verwante documentatie: Tests schrijven met MSTest, Kenmerken

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 - Flow TestContext CancellationToken
  • MSTEST0054 - Eigenschap CancellationToken gebruiken

Verwante documentatie: TestContext

Gegevensgestuurd testen

Regels voor het werken met gegevensgestuurde testscenario's:

Gerelateerde documentatie: Kenmerken die worden gebruikt voor 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
  • MSTEST0050 - Globale testinrichting moet geldig zijn

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

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
  • MSTEST0048 - Gebruik van de eigenschap TestContext
  • MSTEST0049 - Flow TestContext CancellationToken
  • MSTEST0054 - Eigenschap CancellationToken gebruiken

Verwante documentatie: 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

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
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

* 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