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 wie Leistung und Nutzung gegliedert...

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 der Diagnose 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
  • MSTEST0069 – Geerbtes [TestClass] wird vom MSTest-Quellgenerator ignoriert.
  • MSTEST0071 - Die Testmethode sollte keinen Anzeigenamen angeben, der dem Namen entspricht.

Verwandte Dokumentation: Schreiben von Tests mit MSTest

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 – TestContext CancellationToken-Flow
  • MSTEST0054 – Verwenden der CancellationToken-Eigenschaft
  • MSTEST0064 – Asynchrone Assertionsmethoden bevorzugen
  • MSTEST0067 – Vermeiden sie synchrones Blockieren von Aufrufen im Testcode

Zugehörige Dokumentation: TestContext

Datengesteuerte Tests

Regeln für das Arbeiten mit datengesteuerten Testszenarien:

Zugehörige Dokumentation: Datengesteuerte Tests

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
  • MSTEST0047 – Unterdrücken von IDE0060 für nicht verwendete TestContext-Parameter bei Initialisierungs- und Bereinigungsmethoden
  • MSTEST0050 - Globale Prüfvorrichtung sollte gültig sein
  • - [Ignore] MSTEST0066 sollte eine Begründung angeben

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 von 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 müssen eine einzelne Anweisung enthalten
  • MSTEST0053 – Vermeiden von Assert-Formatparametern
  • MSTEST0058 – Vermeiden von Assertionen in Catch-Blöcken
  • MSTEST0064 – Asynchrone Assertionsmethoden bevorzugen
  • MSTEST0065 – Verwenden Sie Assert.AreEqual nicht bei Sammlungstypen
  • MSTEST0068 – Verwenden von Assert anstelle von CollectionAssert

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
  • MSTEST0047 – Unterdrücken IDE0060 für den TestContext-Parameter
  • MSTEST0048 – Verwendung von TestContext-Eigenschaften
  • MSTEST0049 – TestContext CancellationToken-Flow
  • 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
  • - [MemberCondition] MSTEST0070 Argumente sollten gültig sein

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 von Assert.Fail gegenüber stets 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-nullbare Referenz 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 Duplizieren von DataRow 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
MSTEST0047 Unterdrückung Unterdrücken IDE0060 für den TestContext-Parameter N/A
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 TestMethodAttribute-Duplikat 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
MSTEST0064 Usage Asynchrone Assertionsmethoden bevorzugen Info
MSTEST0065 Usage Vermeiden Sie Assert.AreEqual bei Sammlungstypen Warnung
MSTEST0066 Entwurf [Ignore] sollte eine Begründung angeben Info
MSTEST0067 Usage Vermeiden sie synchrones Blockieren von Aufrufen im Testcode Informationen (standardmäßig deaktiviert)
MSTEST0068 Usage Verwenden Sie Assert anstelle von CollectionAssert Info
MSTEST0069 Usage Geerbt [TestClass] wird vom MSTest-Quellgenerator ignoriert. Warnung
MSTEST0070 Usage [MemberCondition] Argumente sollten gültig sein Warnung
MSTEST0071 Usage Die Testmethode sollte keinen Anzeigenamen angeben, der dem Namen entspricht. Info

* 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