MSTEST0069: Odziedziczony atrybut [TestClass] jest ignorowany przez generator kodu źródłowego MSTest

Property Wartość
Identyfikator reguły MSTEST0069
Title Odziedziczona klasa [TestClass] jest ignorowana przez generator kodu źródłowego MSTest
Kategoria Usage
Poprawka jest przełomowa lub nieprzełomowa Non-breaking
Domyślnie włączone Yes
domyślna ciężkość Warning
wprowadzone w wersji 4.3.0
Czy istnieje poprawka kodu No

Note

Ten analizator jest dostarczany w MSTest.SourceGeneration pakiecie i jest ładowany tylko dla projektów, które zdecydowały się na generator źródła odbicia MSTest. Nie ma zastosowania, gdy jest używane domyślne odnajdywanie oparte na odbiciu.

Przyczyna

Klasa jest przeznaczona jako klasa testowa MSTest za pomocą [TestClass] atrybutu dziedziczonego z klasy bazowej, a nie deklarowania [TestClass] bezpośrednio.

Opis reguły

Generator źródła MSTest wylicza klasy testowe przy użyciu metody ForAttributeWithMetadataName, która nie jest zgodna z dziedziczeniem. Klasa, która opiera się na dziedziczeniu elementu [TestClass] z typu bazowego, jest niejawnie pomijana podczas wykrywania generowanego ze źródła i nie będzie można jej uruchomić, gdy dostawca generowany ze źródła jest aktywnym backendem refleksji.

[TestClass]
public class BaseTests
{
}

// Violation: relies on the inherited [TestClass] attribute.
public class DerivedTests : BaseTests
{
    [TestMethod]
    public void Test()
    {
    }
}

Jak naprawić naruszenia

Zastosuj [TestClass] bezpośrednio do klasy pochodnej, aby było wykrywane, kiedy wykrywanie generowane przez kod źródłowy jest włączone.

[TestClass]
public class BaseTests
{
}

[TestClass]
public class DerivedTests : BaseTests
{
    [TestMethod]
    public void Test()
    {
    }
}

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń z tej reguły po włączeniu generowania źródła, ponieważ klasa testowa, której dotyczy problem, nie zostanie odnaleziona ani wykonana. Można ją pominąć, jeśli klasa nie ma być klasą testową.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

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

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

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