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 |
| È presente una correzione del codice | No |
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, per poi mandare in errore l'intera esecuzione. Questo analizzatore segnala gli stessi problemi in fase di compilazione, quando correggerli costa meno. Il tipo a cui si fa riferimento deve:
- Essere non generici.
- Essere istanziabile, quindi non può essere astratto, statico, un'interfaccia o un tipo simile a 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 si usa .NET come destinazione, la forma generica [assembly: TestFilterProvider<MyFilter>] impone invece i requisiti dell'interfaccia e del costruttore tramite vincoli generici, quindi a questa forma si applicano ancora solo i controlli sul tipo generico 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, istanziabile, implementi ITestFilter e 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 fa fallire l’intera esecuzione del test in fase di esecuzione, anziché il solo filtro.
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.