Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
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
noneSchweregrad.
Hinweis
Regeln, die als Warnungen aktiviert sind, sind Verstöße, die voraussichtlich während der Laufzeit zu Problemen führen werden.
Recommended
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:
- MSTEST0003: Testmethoden sollten über ein gültiges Layout verfügen.
- MSTEST0043: Verwenden Sie das Wiederholungsattribut für die Testmethode.
All
Dieser Modus ist aggressiver als Recommended. Alle Regeln werden als Warnungen aktiviert. Darüber hinaus werden die folgenden Regeln als Fehler eingestuft:
- MSTEST0003: Testmethoden sollten über ein gültiges Layout verfügen.
- MSTEST0043: Verwenden Sie das Wiederholungsattribut für die Testmethode.
Hinweis
Die folgenden Regeln sind vollständig optional und werden in den Modi Default, Recommendedoder All nicht aktiviert.
- MSTEST0015: Testmethode sollte nicht ignoriert werden
- MSTEST0019: Bevorzuge TestInitialize-Methoden gegenüber Konstruktoren
- MSTEST0020: Konstruktoren gegenüber TestInitialize-Methoden bevorzugen
- MSTEST0021: Bevorzugen Sie Dispose gegenüber TestCleanup-Methoden
- MSTEST0022: Bevorzuge TestCleanup über Dispose-Methoden
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:
- MSTEST0007 – Attribut bei Testmethode verwenden
- MSTEST0014 – DataRow sollte gültig sein
- MSTEST0018 – DynamicData sollte gültig sein
- MSTEST0042 – Duplizieren von DataRow
- MSTEST0052 – Vermeide die explizite Verwendung von DynamicDataSourceType
- MSTEST0062 – Vermeiden Sie die Verwendung von Out/Ref-Parametern in Testmethoden
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