Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| Property | Value |
|---|---|
| ID da regra | MSTEST0081 |
| Título | '[TestFilterProvider]' deve fazer referência a um tipo de filtro de teste válido |
| Categoria | Uso |
| Correção é disruptiva ou não disruptiva | Inquebrável |
| Habilitado por padrão | Sim |
| Severidade padrão | Warning |
| introduzido na versão | 4.4.0 (versão prévia) |
| Há uma correção de código | Não |
Importante
Este analisador está planejado para MSTest 4.4 e está disponível apenas em builds de visualização até que o MSTest 4.4.0 seja lançado.
Cause
[assembly: TestFilterProvider(typeof(MyFilter))] faz referência a um tipo que não atende aos requisitos que o adaptador impõe em tempo de execução ou o assembly registra mais de um provedor de filtro de teste.
Descrição da regra
[assembly: TestFilterProvider(typeof(MyFilter))] passa o tipo de filtro como um Type, de modo que o compilador aceita qualquer tipo. O adaptador valida o tipo somente quando materializa o filtro e, em seguida, falha em toda a execução. Esse analisador relata os mesmos problemas no tempo de build, em que eles são baratos de corrigir. O tipo referenciado deve:
- Seja não genérico.
- Seja instanciável, portanto, não pode ser abstrato, estático, uma interface ou um tipo de byref.
- Implementar
ITestFilter. - Declare um construtor público sem parâmetros (cada struct já satisfaz isso).
No máximo, um provedor de filtro de teste pode ser registrado por assembly de teste e a aprovação de um tipo de filtro explícito null também falha. Ao direcionar .NET, o formulário genérico [assembly: TestFilterProvider<MyFilter>] impõe os requisitos de interface e construtor por meio de restrições genéricas, portanto, somente as verificações de tipo genérico e "no máximo um provedor" ainda se aplicam a ela.
[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 ele não seja genérico, instanciável, implemente e tenha um construtor público sem parâmetros ITestFilter.
public sealed class MyFilter : ITestFilter
{
public TestFilterResult Filter(TestFilterContext context) => TestFilterResult.Run;
}
Quando suprimir avisos
Não suprima avisos dessa regra. Uma violação falha em toda a execução do teste em tempo de execução, em vez de apenas o próprio filtro.
Suprimir um aviso
Se você quiser suprimir apenas uma única violação, adicione diretivas de pré-processador ao arquivo de origem para desabilitar a regra e, em seguida, habilitá-la novamente.
#pragma warning disable MSTEST0081
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0081
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade 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.