Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | Value |
|---|---|
| ID regola | MSTEST0081 |
| Titolo | '[TestFilterProvider]' deve fare riferimento a un tipo di filtro di test valido |
| Categoria | Utilizzo |
| La modifica è dirompente o non dirompente | Non rompente |
| Abilitato per impostazione predefinita | Sì |
| Gravità predefinita | Avvertimento |
| introdotta nella versione | 4.4.0 (anteprima) |
| È presente una correzione del codice | No |
Importante
Questo analizzatore è pianificato per MSTest 4.4 ed è disponibile solo nelle build di anteprima fino al rilascio di MSTest 4.4.0.
Cause
[assembly: TestFilterProvider(typeof(MyFilter))] fa riferimento a un tipo che non soddisfa i requisiti applicati dall'adattatore in fase di esecuzione oppure l'assembly registra più provider di filtri di test.
Descrizione della regola
[assembly: TestFilterProvider(typeof(MyFilter))] passa il tipo di filtro come , Typein modo che il compilatore accetti qualsiasi tipo. L'adattatore convalida il tipo solo quando materializza il filtro e quindi non riesce l'intera esecuzione. Questo analizzatore segnala gli stessi problemi in fase di compilazione, in cui sono economici da risolvere. Il tipo a cui si fa riferimento deve:
- Essere non generici.
- È possibile creare un'istanza, quindi non può essere astratta, statica, un'interfaccia o un tipo simile a un byref.
- Implementare
ITestFilter. - Dichiarare un costruttore pubblico senza parametri (ogni struct soddisfa già questo valore).
Al massimo un provider di filtri di test può essere registrato per ogni assembly di test e anche il passaggio di un tipo di filtro esplicito null ha esito negativo. Quando la destinazione è .NET, il modulo generico [assembly: TestFilterProvider<MyFilter>] applica invece i requisiti dell'interfaccia e del costruttore tramite vincoli generici, quindi vengono applicati solo i controlli generici e "al massimo un provider".
[assembly: TestFilterProvider(typeof(MyFilter))]
public sealed class MyFilter : ITestFilter
{
public MyFilter(string mode) { } // Violation: no public parameterless constructor
public TestFilterResult Filter(TestFilterContext context) => TestFilterResult.Run;
}
Come correggere le violazioni
Aggiungere un costruttore pubblico senza parametri oppure modificare il tipo in modo che sia non generico, crea un'istanza, implementi ITestFiltere abbia un costruttore pubblico senza parametri.
public sealed class MyFilter : ITestFilter
{
public TestFilterResult Filter(TestFilterContext context) => TestFilterResult.Run;
}
Quando eliminare gli avvisi
Non eliminare gli avvisi da questa regola. Una violazione non riesce l'intera esecuzione del test in fase di esecuzione anziché solo il filtro stesso.
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 MSTEST0081
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0081
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.MSTEST0081.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.