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 | Valor |
|---|---|
| ID da regra | MSTEST0070 |
| Título | Os argumentos [MemberCondition] devem ser válidos |
| Categoria | Uso |
| Correção interruptiva ou sem interrupção | Non-breaking |
| Habilitado por padrão | Sim |
| Severidade padrão | Warning |
| introduzido na versão | 4.3.0 |
| Há uma correção de código | No |
Cause
Um [MemberCondition] atributo faz referência a um membro que a estrutura de teste não pode avaliar. O membro referenciado deve existir no tipo referenciado, ser public static, retornar boole (para métodos) ser sem parâmetros.
Descrição da regra
O atributo [MemberCondition] executa ou ignora condicionalmente uma classe de teste ou um método de teste com base no valor de um ou mais membros estáticos bool. Você faz referência a cada membro pelo tipo declarante e pelo nome, por exemplo [MemberCondition(typeof(MyConditions), nameof(MyConditions.IsEnabled))].
Como o membro é referenciado pelo nome, a estrutura de teste o resolve via reflexão no runtime. Se o membro não existir, não for public, não for static, não retornar bool, exigir parâmetros ou for uma propriedade somente de gravação, a avaliação da condição gerará uma InvalidOperationException e o teste falhará. Esse analisador identifica esses problemas no momento do build para que erros de digitação e refatorações não comprometam silenciosamente a restrição de testes.
A regra relata uma violação quando um membro referenciado:
- Não pode ser encontrado no tipo referenciado.
- Não é
public. - Não é
static. - Não é uma propriedade, um campo ou um método sem parâmetros.
- Não retorna
bool. - É um método que declara parâmetros.
- É uma propriedade sem um getter.
public class TestConditions
{
public static bool IsEnabled => true;
private static bool IsHidden => true; // not public
public bool IsInstance => true; // not static
public static int Count => 0; // wrong return type
public static bool IsReady(string mode) => true; // has parameters
}
[TestClass]
public class MyTestClass
{
[TestMethod]
[MemberCondition(typeof(TestConditions), "IsEnable")] // Violation - member not found (typo)
public void Test1()
{
}
[TestMethod]
[MemberCondition(typeof(TestConditions), nameof(TestConditions.IsInstance))] // Violation - not static
public void Test2()
{
}
[TestMethod]
[MemberCondition(typeof(TestConditions), nameof(TestConditions.Count))] // Violation - doesn't return bool
public void Test3()
{
}
}
Como corrigir violações
Faça referência a um membro que seja public static, retorna boole (para métodos) não tem parâmetros. Corrija o nome do membro se for um erro de digitação ou ajuste a declaração de membro para que ele atenda aos requisitos.
public class TestConditions
{
public static bool IsEnabled => true;
}
[TestClass]
public class MyTestClass
{
[TestMethod]
[MemberCondition(typeof(TestConditions), nameof(TestConditions.IsEnabled))]
public void Test1()
{
}
}
Use nameof em vez de um literal de cadeia de caracteres para que o compilador e essa regra mantenham a referência em sincronia quando você renomear o membro.
Você também pode referenciar um campo ou um método sem parâmetros, combinar vários membros (eles são combinados com AND) e usar ConditionMode para inverter a condição:
[TestMethod]
[MemberCondition(
typeof(TestConditions),
nameof(TestConditions.IsEnabled),
nameof(TestConditions.IsSupported))] // runs only when both are true
public void Test2()
{
}
[TestMethod]
[MemberCondition(ConditionMode.Exclude, typeof(TestConditions), nameof(TestConditions.IsLegacy))] // skipped when true
public void Test3()
{
}
Quando suprimir avisos
Não suprima avisos dessa regra. Um [MemberCondition] atributo que faz referência a um membro inválido é lançado no runtime e faz com que o teste falhe em vez de avaliar a condição.
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 MSTEST0070
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0070
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.MSTEST0070.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.