Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
| Propriété | Valeur |
|---|---|
| Identificateur de la règle | MSTEST0070 |
| Titre | Les arguments [MemberCondition] doivent être valides |
| Category | Usage |
| Le correctif a un effet disruptif ou non disruptif | Non-breaking |
| Activé par défaut | Oui |
| Sévérité par défaut | Warning |
| Introduit dans la version | 4.3.0 |
| Existe-t-il une correction de code | Non |
Cause
Un [MemberCondition] attribut fait référence à un membre que l’infrastructure de test ne peut pas évaluer. Le membre référencé doit exister sur le type référencé, être public static, retourner boolet (pour les méthodes) être sans paramètre.
Description de la règle
L’attribut [MemberCondition] exécute ou ignore de manière conditionnelle une classe de test ou une méthode de test en fonction de la valeur d’un ou plusieurs membres statiques bool . Vous référencez chaque membre en déclarant son type et son nom, par exemple [MemberCondition(typeof(MyConditions), nameof(MyConditions.IsEnabled))].
Étant donné que le membre est référencé par nom, l’infrastructure de test la résout par réflexion au moment de l’exécution. Si le membre n’existe pas, n’est pas public, n’est pas static, ne retourne pas bool, nécessite des paramètres ou est une propriété en écriture seule, l’évaluation de la condition lève une InvalidOperationException et le test échoue. Cet analyseur détecte ces problèmes lors de la compilation afin d’éviter que des fautes de frappe et des refactorisations ne compromettent sans avertissement le mécanisme de blocage par les tests.
La règle signale une violation lorsqu’un membre référencé :
- Introuvable sur le type référencé.
- Différent de
public. - Différent de
static. - N’est pas une propriété, un champ ou une méthode sans paramètre.
- Ne renvoie pas
bool. - Méthode qui déclare des paramètres.
- Est une propriété sans accesseur.
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()
{
}
}
Comment corriger les violations
Référencer un membre qui est public static, retourne boolet (pour les méthodes) est sans paramètre. Corrigez le nom du membre s’il s’agit d’une faute de frappe ou ajustez la déclaration de membre afin qu’il réponde aux exigences.
public class TestConditions
{
public static bool IsEnabled => true;
}
[TestClass]
public class MyTestClass
{
[TestMethod]
[MemberCondition(typeof(TestConditions), nameof(TestConditions.IsEnabled))]
public void Test1()
{
}
}
Utilisez nameof au lieu d’une chaîne littérale afin que le compilateur et cette règle gardent la référence synchronisée lorsque vous renommez le membre.
Vous pouvez également faire référence à un champ ou à une méthode sans paramètre, combiner plusieurs membres (ils sont combinés avec l’opérateur ET) et utiliser ConditionMode pour inverser la condition :
[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()
{
}
Quand supprimer les avertissements
Ne supprimez pas les avertissements de cette règle. Un attribut [MemberCondition] qui fait référence à un membre invalide génère une exception à l’exécution et provoque l’échec du test au lieu d’évaluer la condition.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable MSTEST0070
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0070
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0070.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements d’analyse du code.