Język

MSTEST0085: "[TestClass]" nie należy stosować do klas abstrakcyjnych

Property Value
Identyfikator reguły MSTEST0085
Tytuł [TestClass] nie należy stosować do klas abstrakcyjnych
Category Usage
Poprawka jest przełomowa lub nieprzełomowa Non-breaking
Domyślnie włączone Yes
domyślna ciężkość Informacje
wprowadzone w wersji 4.5.0
Czy istnieje poprawka kodu No

Przyczyna

Klasa abstrakcyjna deklaruje TestClassAttribute lub atrybut, który pochodzi z niego.

Opis reguły

MSTest nie może utworzyć instancji ani wykryć klasy abstrakcyjnej jako klasy testowej, więc [TestClass] nie ma wpływu na typ abstrakcyjny. Metody testowe zadeklarowane w abstrakcyjnej klasie bazowej są odnajdywane za pomocą konkretnych klas pochodnych. Każda klasa betonowa musi zadeklarować własny [TestClass] atrybut, ponieważ atrybuty klasy testowej nie są dziedziczone.

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

Jak naprawić naruszenia

Usuń [TestClass] z abstrakcyjnej klasy bazowej i dodaj go do każdej konkretnej pochodnej klasy testowej.

public abstract class SharedTests { }

[TestClass]
public sealed class ConcreteTests : SharedTests { }

Kiedy pomijać ostrzeżenia

Nie wyłączaj tej reguły. Atrybut w klasie abstrakcyjnej nie sprawia, że klasa jest wykrywalna, a konkretne klasy pochodne nadal wymagają klasy [TestClass].

Pomijanie ostrzeżenia

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz także