MSTEST0069: [TestClass] ereditato viene ignorato dal generatore di codice sorgente MSTest

Proprietà Valore
ID regola MSTEST0069
Title [TestClass] ereditato viene ignorato dal generatore di codice sorgente di MSTest
Categoria Usage
La modifica è dirompente o non dirompente Non-breaking
Abilitato per impostazione predefinita
Gravità predefinita Avvertimento
introdotta nella versione 4.3.0
È presente una correzione del codice No

Nota

Questo analizzatore viene fornito nel pacchetto MSTest.SourceGeneration e viene caricato solo per i progetti che hanno abilitato il generatore di codice sorgente basato su reflection di MSTest, che rappresenta una funzionalità sperimentale. Non si applica quando si usa il rilevamento predefinito basato sulla reflection.

Cause

Una classe è considerata una classe di test MSTest tramite un attributo [TestClass] ereditato da una classe base, anziché dichiarare direttamente [TestClass].

Descrizione regola

Il generatore di origine MSTest enumera le classi di test usando ForAttributeWithMetadataName, che non segue l'ereditarietà. Una classe che dipende dall'ereditare [TestClass] da un tipo base viene silenziosamente esclusa dal rilevamento generato dal codice sorgente e non potrà essere eseguita quando il provider generato dal codice sorgente è il backend di reflection attivo.

[TestClass]
public class BaseTests
{
}

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

Come correggere le violazioni

Applicare [TestClass] direttamente alla classe derivata in modo che venga individuata quando l'individuazione generata dall'origine è attiva.

[TestClass]
public class BaseTests
{
}

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

Quando eliminare gli avvisi

Non sopprimere gli avvisi per questa regola quando la generazione del codice sorgente è abilitata, perché la classe di test interessata non verrà rilevata né eseguita. È possibile eliminarlo se la classe non è effettivamente destinata a essere una classe di test.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

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

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità su none nel file di configurazione .

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

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.