Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| Property | Value |
|---|---|
| ID da regra | MSTEST0081 |
| Título | '[TestFilterProvider]' deve referir-se a um tipo válido de filtro de teste |
| Category | Usage |
| A correção é invasiva ou não invasiva | Inquebrável |
| Ativado por padrão | Sim |
| Severidade padrão | Warning |
| Introduzido na versão | 4.4.0 (pré-visualização) |
| Existe uma correção de código | Não |
Importante
Este analisador está planeado para o MSTest 4.4 e está disponível apenas em versões pré-visualizadas até ao lançamento do MSTest 4.4.0.
Motivo
[assembly: TestFilterProvider(typeof(MyFilter))] Refere-se a um tipo que não satisfaz os requisitos que o adaptador impõe em tempo de execução, ou o conjunto regista mais do que um fornecedor de filtro de teste.
Descrição da regra
[assembly: TestFilterProvider(typeof(MyFilter))] passa o tipo de filtro como um Type, pelo que o compilador aceita qualquer tipo. O adaptador valida o tipo apenas quando este materializa o filtro, e depois falha durante toda a execução. Este analisador reporta os mesmos problemas durante a compilação, onde são baratos de resolver. O tipo referido deve:
- Seja não genérico.
- Pode ser instanciado, por isso não pode ser abstrato, estático, uma interface ou um tipo semelhante a byref.
- Implementar
ITestFilter. - Declare um construtor público sem parâmetros (todas as estruturas já satisfazem isto).
No máximo, pode ser registado um fornecedor de filtro de teste por conjunto de teste, e passar um tipo de filtro explícito null também falha. Ao direcionar o .NET, a forma genérica [assembly: TestFilterProvider<MyFilter>] aplica os requisitos de interface e construtor através de restrições genéricas, pelo que apenas as verificações genéricas e "no máximo um fornecedor" continuam a aplicar-se.
[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;
}
Como corrigir violações
Adicione um construtor público sem parâmetros, ou ajuste o tipo para que seja não genérico, instanciado, implemente ITestFilter, e tenha um construtor público sem parâmetros.
public sealed class MyFilter : ITestFilter
{
public TestFilterResult Filter(TestFilterContext context) => TestFilterResult.Run;
}
Quando suprimir avisos
Não suprima avisos desta regra. Uma violação falha todo o teste em tempo de execução, e não apenas o filtro em si.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.
#pragma warning disable MSTEST0081
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0081
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0081.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.