Teilen über


MSTest-Codeanalyse

MSTest-Analyseregeln ("MSTESTxxxx") überprüfen Ihren C#- oder Visual Basic-Code auf Sicherheit, Leistung, Entwurf und andere Probleme.

Tipp

Wenn Sie Visual Studio verwenden, haben viele Analyseregeln Codekorrekturen zugeordnet, die Sie anwenden können, um das Problem zu beheben. Codekorrekturen werden im Fehlerbehebungsmenü (Glühbirnensymbol) angezeigt.

Die Regeln sind in Kategorien unterteilt, z. B. Leistung und Nutzung.

Ab MSTest.TestFramework 3.7 ist das NuGet-Paket "MSTest.Analyzers NuGet" eine Abhängigkeit des Frameworks. Für frühere Versionen müssen Sie MSTest Metapackage verwenden oder einen Paketverweis für MSTest.Analyzers explizit hinzufügen.

MSTestAnalysisMode

Ab MSTest 3.8 ist eine MSBuild-Eigenschaft mit dem Namen MSTestAnalysisMode verfügbar, um zu bestimmen, welche Analysegeräte zu welchem Schweregrad aktiviert sind.

Tipp

Um zu sehen, welche Regeln für jeden Modus bei welcher Schwere aktiviert sind, können Sie im NuGet-Cache zum Paket der interessierenden Version navigieren, das globalconfigs-Verzeichnis suchen und die .globalconfig-Datei öffnen, die dem Analysemodus entspricht. Weitere Informationen zum Suchen des NuGet-Cacheverzeichnisses finden Sie unter Verwalten der globalen Pakete, des Caches und der temporären Ordner. Finden Sie in diesem Verzeichnis zuerst das mstest.analyzers-Verzeichnis, dann die Version (3.8 und höher), und schließlich globalconfigs. Alternativ können Sie das NuGet-Paket der interessanten nuget.org Version herunterladen und im NuGet-Paket-Explorer (Windows-App) anzeigen oder direkt in der Web-App-Version des NuGet-Paket-Explorers anzeigen.

Die verfügbaren Werte für diese Eigenschaft:

None

Dieser Wert legt alle Analysatoren auf none Schweregrad fest und deaktiviert alle. Anschließend können Sie einzelne Analyzer mithilfe von .editorconfig oder .globalconfig Dateien aktivieren.

Default

Diese Einstellung folgt dem standarddokumentierten Verhalten für jede Regel.

  • Standardmäßig aktivierte Regeln verwenden den Standardschweregrad.
  • Standardmäßig deaktivierte Regeln verwenden none Schweregrad.

Hinweis

Regeln, die als Warnungen aktiviert sind, sind Verstöße, die voraussichtlich während der Laufzeit zu Problemen führen werden.

Dies ist der Modus, den die meisten Entwickler verwenden werden. Regeln, die standardmäßig mit dem Schweregrad Info (suggestion) aktiviert sind, werden zu Warnungen eskaliert. Die folgenden Regeln werden in beiden Modi Recommended und All als Fehler eskaliert:

All

Dieser Modus ist aggressiver als Recommended. Alle Regeln werden als Warnungen aktiviert. Darüber hinaus werden die folgenden Regeln als Fehler eingestuft:

Regeln nach Kategorie

Die Analyseregeln sind in die folgenden Kategorien unterteilt:

Entwurfsregeln

Designregeln helfen Ihnen beim Erstellen und Verwalten von Testsuiten, die den richtigen Design- und bewährten Methoden entsprechen.

Leistungsregeln

Leistungsregeln unterstützen Hochleistungstests.

Unterdrückungsregeln

Unterdrückungsregeln unterstützen das Unterdrücken von Diagnosen aus anderen Regeln.

Nutzungsregeln

Verwendungsregeln unterstützen die ordnungsgemäße Verwendung von MSTest.

Regeln nach Konzept

Finden Sie Regeln, die nach allgemeinen Testszenarien und Konzepten organisiert sind:

Teststruktur und Attribute

Regeln, die sicherstellen, dass Ihre Testklassen und -methoden ordnungsgemäß strukturiert und eingerichtet sind:

  • MSTEST0002 – Testklasse sollte gültig sein
  • MSTEST0003 – Testmethode sollte gültig sein
  • MSTEST0004 – Öffentliche Typen sollten Testklassen sein
  • MSTEST0007 – Attribut bei Testmethode verwenden
  • MSTEST0016 – Testklasse sollte testmethode haben
  • MSTEST0029 - Öffentliche Methode sollte Testmethode sein
  • MSTEST0030 – Typ mit Testmethode sollte eine Testklasse sein
  • MSTEST0036 – Schatten nicht verwenden
  • MSTEST0041 – Verwenden von bedingungsbasierten Attributen mit Testklasse
  • MSTEST0044 - Bevorzugen Sie TestMethod anstelle von DataTestMethod
  • MSTEST0056 - TestMethodAttribute sollte DisplayName richtig festlegen
  • MSTEST0057 – TestMethodAttribute sollte Quellinformationen weitergeben
  • MSTEST0060 - Duplicate TestMethodAttribute
  • MSTEST0063 – Testklasse sollte über einen gültigen Konstruktor verfügen

Verwandte Dokumentation: Schreiben von Tests mit MSTest, Attributes

Async/Wait-Muster strukturieren

Regeln zum ordnungsgemäßen Schreiben von asynchronen Testcode:

  • MSTEST0013 – AssemblyCleanup sollte gültig sein (enthält asynchrone Regeln)
  • MSTEST0027 - Asynchrones Suffix für Testmethoden unterdrücken
  • MSTEST0028 - Asynchrones Suffix für Testeinrichtungsmethoden unterdrücken
  • MSTEST0039 - Verwenden neuerer Assert.Throws-Methoden (asynchrone Varianten)
  • MSTEST0040 – Vermeiden der Verwendung von Assertionen im asynchronen void-Kontext
  • MSTEST0045 – Verwenden einer kooperativen Stornierung für Timeouts
  • MSTEST0049 - Flow TestContext CancellationToken
  • MSTEST0054 – Verwenden der CancellationToken-Eigenschaft

Zugehörige Dokumentation: TestContext

Datengesteuerte Tests

Regeln für das Arbeiten mit datengesteuerten Testszenarien:

Verwandte Dokumentation: Attribute, die für datengesteuerte Tests verwendet werden

Lebenszyklus und Initialisierung

Regeln für die Testinitialisierung, Bereinigung und Lebenszyklusverwaltung:

  • MSTEST0008 – TestInitialize sollte gültig sein
  • MSTEST0009 – TestCleanup sollte gültig sein
  • MSTEST0010 – ClassInitialize sollte gültig sein
  • MSTEST0011 – ClassCleanup sollte gültig sein
  • MSTEST0012 – AssemblyInitialize sollte gültig sein
  • MSTEST0013 – AssemblyCleanup sollte gültig sein
  • MSTEST0019 - TestInitialize gegenüber Konstruktoren bevorzugen
  • MSTEST0020 – Konstruktoren vor TestInitialize bevorzugen
  • MSTEST0021 - Dispose anstatt TestCleanup bevorzugen
  • MSTEST0022 – Bevorzugen Sie TestCleanup statt Dispose
  • MSTEST0034 – Verwenden von ClassCleanupBehavior.EndOfClass
  • MSTEST0050 - Globale Prüfvorrichtung sollte gültig sein

Verwandte Dokumentation: Lebenszyklus

Assertions

Regeln für die korrekte und effektive Verwendung von Assertionsmethoden:

  • MSTEST0006 – Vermeiden Sie das Attribut "ExpectedException"
  • MSTEST0014 – DataRow sollte gültig sein
  • MSTEST0017 - Assertionsargumente sollten in der richtigen Reihenfolge übergeben werden
  • MSTEST0023 - Boolesche Assertion nicht verwerfen
  • MSTEST0025 - Bevorzugen Sie Assert.Fail gegenüber stets falschen Bedingungen
  • MSTEST0026 – Assertionsargumente sollten bedingten Zugriff vermeiden
  • MSTEST0032 – Überprüfen der bedingung "Always-true assert"
  • MSTEST0037 – Verwenden der richtigen Assert-Methoden
  • MSTEST0038 – Vermeiden von Assert.AreSame mit Werttypen
  • MSTEST0039 – Verwenden neuerer Assert.Throws-Methoden
  • MSTEST0046 – Verwenden von "Assert" anstelle von "StringAssert"
  • MSTEST0051 - Assert.Throws muss eine einzelne Anweisung enthalten
  • MSTEST0053 – Vermeiden von Assert-Formatparametern
  • MSTEST0058 – Vermeiden von Assertionen in Catch-Blöcken

Verwandte Dokumentation: Assertionen

TestContext

Regeln für die ordnungsgemäße Verwendung des TestContext-Objekts:

  • MSTEST0005 – TestContext sollte gültig sein
  • MSTEST0024 – Speichern Sie keinen statischen TestContext
  • MSTEST0033 - Unterdrücken eines nicht nullfähigen Verweises, der nicht initialisiert wurde
  • MSTEST0048 – Verwendung von TestContext-Eigenschaften
  • MSTEST0049 - Flow TestContext CancellationToken
  • MSTEST0054 – Verwenden der CancellationToken-Eigenschaft

Zugehörige Dokumentation: TestContext

Testkonfiguration

Regeln zum Konfigurieren der Testausführung, Parallelisierung und anderer Testeinstellungen:

  • MSTEST0001 – Parallelize-Attribut verwenden
  • MSTEST0015 - Testmethode sollte nicht ignoriert werden
  • MSTEST0031 - Verwenden Sie "System.ComponentModel.DescriptionAttribute" nicht
  • MSTEST0035 – Verwenden von DeploymentItem mit Testmethode oder Testklasse
  • MSTEST0043 – Verwenden des Wiederholungsattributs für die Testmethode
  • MSTEST0045 – Verwenden einer kooperativen Stornierung für Timeouts
  • MSTEST0055 - Zeichenfolgenmethoden-Rückgabewert nicht ignorieren
  • MSTEST0059 – Korrektes Parallelize-Attribut verwenden
  • MSTEST0061 – Verwenden des OSCondition-Attributs anstelle der Laufzeitüberprüfung

Verwandte Dokumentation: Konfigurieren von MSTest, Ausführen von Tests

Alle Regeln (Kurzübersicht)

Regel-ID Kategorie Title Standardschweregrad
MSTEST0001 Leistung Parallelize-Attribut verwenden Info
MSTEST0002 Usage Die Testklasse sollte gültig sein. Warnung
MSTEST0003 Usage Testmethode sollte gültig sein Warnung → Fehler*
MSTEST0004 Entwurf Öffentliche Typen sollten als Testklassen implementiert werden Info
MSTEST0005 Usage TestContext sollte gültig sein Warnung
MSTEST0006 Entwurf Vermeiden Sie das Attribut ExpectedException Info
MSTEST0007 Usage Attribut bei Testmethode verwenden Warnung
MSTEST0008 Usage TestInitialize sollte gültig sein Warnung
MSTEST0009 Usage TestCleanup sollte gültig sein Warnung
MSTEST0010 Usage ClassInitialize sollte gültig sein. Warnung
MSTEST0011 Usage ClassCleanup sollte gültig sein. Warnung
MSTEST0012 Usage AssemblyInitialize sollte gültig sein Warnung
MSTEST0013 Usage AssemblyCleanup sollte gültig sein Warnung
MSTEST0014 Usage DataRow sollte gültig sein Warnung
MSTEST0015 Entwurf Testmethode sollte nicht ignoriert werden Keine (Zustimmung erforderlich)
MSTEST0016 Entwurf Testklasse sollte testmethode haben Info
MSTEST0017 Usage Assertionsargumente sollten in der richtigen Reihenfolge übergeben werden Info
MSTEST0018 Usage DynamicData sollte gültig sein Warnung
MSTEST0019 Entwurf TestInitialize gegenüber Konstruktoren bevorzugen Keine (Zustimmung erforderlich)
MSTEST0020 Entwurf Bevorzugen Von Konstruktoren gegenüber TestInitialize Keine (Zustimmung erforderlich)
MSTEST0021 Entwurf "Dispose gegenüber TestCleanup bevorzugen" Keine (Zustimmung erforderlich)
MSTEST0022 Entwurf Bevorzugen Sie TestCleanup anstelle von Dispose Keine (Zustimmung erforderlich)
MSTEST0023 Usage Nicht den booleschen Ausdruck negieren Info
MSTEST0024 Usage Speichern Sie den statischen TestContext nicht Warnung
MSTEST0025 Entwurf Bevorzugen Sie Assert.Fail gegenüber immer-falschen Bedingungen. Info
MSTEST0026 Usage Assertionsparameter sollen bedingten Zugriff vermeiden Info
MSTEST0027 Unterdrückung Asynchrones Suffix für Testmethoden unterdrücken N/A
MSTEST0028 Unterdrückung Asynchrones Suffix für Testinstallationsmethoden unterdrücken N/A
MSTEST0029 Entwurf Öffentliche Methode sollte eine Testmethode sein Info
MSTEST0030 Usage Der Typ, der die Testmethode enthält, sollte eine Testklasse sein. Warnung
MSTEST0031 Usage Verwenden Sie "System.ComponentModel.DescriptionAttribute" nicht Info
MSTEST0032 Usage Überprüfung der immer wahren Assert-Bedingung Info
MSTEST0033 Unterdrückung Nicht nullablen Verweis unterdrücken, nicht initialisiert N/A
MSTEST0034 Usage Verwenden Sie ClassCleanupBehavior.EndOfClass Info
MSTEST0035 Usage Verwenden von DeploymentItem mit Testmethode oder Testklasse Info
MSTEST0036 Entwurf Schatten nicht verwenden Warnung
MSTEST0037 Usage Verwenden der richtigen Assert-Methoden Info
MSTEST0038 Usage Vermeiden Sie die Verwendung von Assert.AreSame mit Werttypen Info
MSTEST0039 Usage Verwenden Sie die neueren Assert.Throws-Methoden Info
MSTEST0040 Usage Vermeiden Sie die Verwendung von Assertions im asynchronen void-Kontext. Warnung
MSTEST0041 Usage Verwenden von bedingungsbasierten Attributen mit Testklasse Warnung
MSTEST0042 Usage Doppelter DataRow-Code Warnung
MSTEST0043 Usage Verwenden Sie das Wiederholungsattribut bei der Testmethode Warnung → Fehler*
MSTEST0044 Entwurf Bevorzugen Sie TestMethod vor DataTestMethod Info
MSTEST0045 Entwurf Verwenden Sie eine kooperative Stornierung für Timeouts Info
MSTEST0046 Usage Verwenden von Assert anstelle von StringAssert Info
MSTEST0048 Usage TestContext-Eigenschaftsverwendung Warnung
MSTEST0049 Usage Flow TestContext CancellationToken Info
MSTEST0050 Usage Die globale Testvorrichtung muss gültig sein Warnung
MSTEST0051 Usage Assert.Throws sollte eine einzelne Anweisung enthalten Info
MSTEST0052 Usage Vermeidung expliziter DynamicDataSourceType Info
MSTEST0053 Usage Vermeiden von Assertionsformatparametern Info
MSTEST0054 Usage Verwenden Sie die CancellationToken-Eigenschaft Info
MSTEST0055 Usage Rückgabewert der Zeichenfolgenmethode nicht ignorieren Warnung
MSTEST0056 Usage TestMethodAttribute sollte DisplayName richtig festlegen Info
MSTEST0057 Usage TestMethodAttribute sollte Quellinformationen weitergeben Warnung
MSTEST0058 Usage Vermeiden Sie Assertions in Fangblöcken Info
MSTEST0059 Usage Korrektes Parallelize-Attribut verwenden Warnung
MSTEST0060 Usage Duplicate TestMethodAttribute Warnung
MSTEST0061 Usage Verwenden des OSCondition-Attributs anstelle der Laufzeitüberprüfung Info
MSTEST0062 Usage Vermeiden von Parametern der Out/Ref-Testmethode Warnung
MSTEST0063 Usage Die Testklasse sollte einen gültigen Konstruktor haben Warnung

* Eskaliert an Fehler in Recommended und All Modi.

MSTESTEXP

Mehrere APIs von MSTest sind mit dem Attribut ExperimentalAttribute ausgezeichnet. Dieses Attribut zeigt an, dass die API experimentell ist und in zukünftigen Versionen von MSTest entfernt oder geändert werden kann. Das Attribut wird verwendet, um APIs zu identifizieren, die noch nicht stabil sind und möglicherweise nicht für die Produktionsverwendung geeignet sind.

Die MSTESTEXP-Diagnose warnt Sie vor der Verwendung einer experimentellen API in Ihrem Code. Um diese Diagnose mit SuppressMessageAttribute zu unterdrücken, fügen Sie Ihrem Projekt den folgenden Code hinzu:

using System.Diagnostics.CodeAnalysis;

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

Alternativ können Sie diese Diagnose mit einer Präprozessoranweisung unterdrücken, indem Sie ihrem Projekt den folgenden Code hinzufügen:

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