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 | MSTEST0070 |
| Título | Os argumentos [MemberCondition] devem ser válidos |
| Categoria | Usage |
| A correção é invasiva ou não invasiva | Non-breaking |
| Ativado por padrão | Yes |
| Severidade padrão | Warning |
| Introduzido na versão | 4.3.0 |
| Existe uma correção de código | No |
Motivo
Um [MemberCondition] atributo faz referência a um membro que o framework de teste não consegue avaliar. O membro referenciado tem de existir no tipo referenciado, ser public static, devolver bool e, (no caso dos métodos), não ter parâmetros.
Descrição da regra
O [MemberCondition] atributo executa ou ignora condicionalmente uma classe de teste ou método de teste com base no valor de um ou mais membros estáticos bool . Faz referência a cada membro pelo respetivo tipo declarador e nome, por exemplo [MemberCondition(typeof(MyConditions), nameof(MyConditions.IsEnabled))].
Como o membro é referenciado pelo nome, o framework de teste resolve-o através de reflexão em tempo de execução. Se o membro não existir, não for public, não for static, não devolver bool, requerer parâmetros ou for uma propriedade apenas de escrita, a avaliação da condição lança um InvalidOperationException e o teste falha. Este analisador assinala esses problemas durante a compilação, para que erros tipográficos e refatorações não comprometam silenciosamente a validação dos testes.
A regra reporta uma violação quando um membro referenciado:
- Não pode ser encontrado no tipo referenciado.
- Não é
public. - Não é
static. - Não é um método sem propriedade, campo ou parâmetro.
- Não devolve
bool. - É um método que declara parâmetros.
- É uma propriedade sem um apanhador.
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
Refira um membro que seja public static, retorne bool e (no caso dos métodos) não tenha parâmetros. Corrige o nome do membro se for um erro tipográfico, ou ajusta a declaração de membro para que cumpra os requisitos.
public class TestConditions
{
public static bool IsEnabled => true;
}
[TestClass]
public class MyTestClass
{
[TestMethod]
[MemberCondition(typeof(TestConditions), nameof(TestConditions.IsEnabled))]
public void Test1()
{
}
}
Usa nameof , em vez de uma string literal, para que o compilador e esta regra mantenham a referência sincronizada quando renomeares o membro.
Também pode referenciar um campo ou um método sem parâmetros, combinar vários membros (são combinados 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 desta regra. Um atributo [MemberCondition] que faz referência a um membro inválido gera um erro em tempo de execução e faz o teste falhar em vez de avaliar a condição.
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 MSTEST0070
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0070
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade 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.