Sprache

MSTEST0085: '[TestClass]' sollte nicht auf abstrakte Klassen angewendet werden.

Eigentum Wert
Regel-ID MSTEST0085
Title [TestClass] sollte nicht auf abstrakte Klassen angewendet werden
Kategorie Usage
Fix führt oder führt nicht zur Unterbrechung Non-breaking
Standardmäßig aktiviert Yes
Voreingestellte Schwere Info
wurde in Version eingeführt. 4.5.0
Gibt es eine Codekorrektur No

Ursache

Eine abstrakte Klasse deklariert TestClassAttribute oder ein Attribut, das von ihr abgeleitet wird.

Regelbeschreibung

MSTest kann eine abstrakte Klasse nicht als Testklasse instanziieren oder ermitteln, sodass [TestClass] sie keine Auswirkungen auf den abstrakten Typ hat. Testmethoden, die in einer abstrakten Basisklasse deklariert sind, werden durch konkrete abgeleitete Klassen ermittelt. Jede konkrete Klasse muss ihr eigenes [TestClass] Attribut deklarieren, da Testklassenattribute nicht geerbt werden.

[TestClass] // Violation
public abstract class SharedTests
{
    [TestMethod] public void CommonTest() { }
}

Wie man Verstöße behebt

Entfernen Sie [TestClass] aus der abstrakten Basisklasse und wenden Sie es auf jede konkrete abgeleitete Testklasse an.

public abstract class SharedTests { }

[TestClass]
public sealed class ConcreteTests : SharedTests { }

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie diese Regel nicht. Das Attribut für die abstrakte Klasse macht die Klasse nicht auffindbar, und konkrete abgeleitete Klassen erfordern [TestClass]weiterhin.

Unterdrücken einer Warnung

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

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.MSTEST0085.severity = none

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

Siehe auch