Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| 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.