MSTEST0082: Eine Testklasse erbt einen Lebenszyklus oder eine Testmethode von einer anderen MSTest-Version.

Eigenschaft Wert
Regel-ID MSTEST0082
Title Eine Testklasse erbt einen Lebenszyklus oder eine Testmethode von einer anderen MSTest-Version.
Kategorie Usage
Die Behebung ist eingreifend oder nicht eingreifend Non-breaking
Standardmäßig aktiviert Ja
Voreingestellte Schwere Warning
wurde in Version eingeführt. 4.4.0 (Vorschau)
Gibt es eine Codekorrektur No

Important

Dieser Analyzer ist für MSTest 4.4 geplant und ist nur in Vorschaubuilds verfügbar, bis MSTest 4.4.0 veröffentlicht wird.

Ursache

Eine auffindbare Testklasse erbt eine öffentliche Testmethode oder Lebenszyklusmethode von einer Assembly, die auf eine andere Hauptversion von MSTest verweist.

Regelbeschreibung

MSTest gleicht Test- und Lebenszyklusattribute nach exakter Laufzeittypidentität ab. MSTest v3 definiert diese Attribute in Microsoft.VisualStudio.TestPlatform.TestFramework, während MSTest v4 sie in MSTest.TestFrameworkdefiniert. Wenn eine Basisbibliothek und ein abgeleitetes Testprojekt unterschiedliche Hauptversionen verwenden, ignoriert der Adapter automatisch geerbte Attribute von der anderen Frameworkassembly. Daher werden geerbte Tests nicht erkannt, und geerbte Initialisierungs- oder Bereinigungsmethoden werden nicht ausgeführt.

Beispielsweise kann eine freigegebene Testbibliothek, die mit MSTest v3 erstellt wurde, folgendes deklarieren:

public abstract class SharedTests
{
    [TestMethod] public void InheritedTest() { }
}

Ein MSTest v4-Projekt, das von der Basisklasse abgeleitet wird, löst die Diagnose aus:

[TestClass]
public sealed class ProductTests : SharedTests { } // Violation

Die Analyse überprüft geerbte Testmethoden, Testinitialisierungs- und Bereinigungsmethoden sowie Klasseninitialisierungs- und Bereinigungsmethoden, die für die Ausführung für abgeleitete Klassen konfiguriert sind.

Wie man Verstöße behebt

Verweisen Sie auf die gleiche MSTest-Hauptversion aus der Basisbibliothek und auf das abgeleitete Testprojekt. Kompilieren Sie die Assembly neu, die die Basisklasse deklariert, und kompilieren Sie bei einem benutzerdefinierten Attribut, das von einem MSTest-Attribut abgeleitet ist, die Assembly neu, die das benutzerdefinierte Attribut deklariert.

Wann sollten Warnungen unterdrückt werden?

Sie sollten keine Warnungen von dieser Regel unterdrücken. Ein Verstoß bedeutet, dass MSTest geerbte Tests oder Lifecycle-Methoden stillschweigend überspringt.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

#pragma warning disable MSTEST0082
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0082

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad auf none in der Konfigurationsdatei fest.

[*.{cs,vb}]
dotnet_diagnostic.MSTEST0082.severity = none

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Siehe auch