MSTEST0081 : '[TestFilterProvider]' doit référencer un type de filtre de test valide

Propriété Valeur
Identificateur de la règle MSTEST0081
Titre '[TestFilterProvider]' doit référencer un type de filtre de test valide
Category Usage
Le correctif a un effet disruptif ou non disruptif Non-breaking
Activé par défaut Yes
Sévérité par défaut Warning
Introduit dans la version 4.4.0 (préversion)
Existe-t-il une correction de code No

Important

Cet analyseur est planifié pour MSTest 4.4 et est disponible uniquement dans les versions préliminaires jusqu’à la publication de MSTest 4.4.0.

Cause

[assembly: TestFilterProvider(typeof(MyFilter))] fait référence à un type qui ne répond pas aux exigences appliquées par l’adaptateur au moment de l’exécution, ou l’assembly inscrit plusieurs fournisseurs de filtres de test.

Description de la règle

[assembly: TestFilterProvider(typeof(MyFilter))] transmet le type de filtre en tant que Type, de sorte que le compilateur accepte n’importe quel type du tout. L’adaptateur valide le type uniquement lorsqu’il matérialise le filtre, puis échoue toute l’exécution. Cet analyseur signale les mêmes problèmes au moment de la génération, où ils sont bon marché à corriger. Le type référencé doit :

  • Être non générique.
  • Être instanciable, de sorte qu’il ne peut pas être abstrait, statique, une interface ou un type de type parref-like.
  • Implémentez ITestFilter.
  • Déclarez un constructeur sans paramètre public (chaque struct répond déjà à ceci).

Au plus un fournisseur de filtre de test peut être inscrit par assembly de test et le passage d’un type de filtre explicite null échoue également. Lorsque vous ciblez .NET, le formulaire générique [assembly: TestFilterProvider<MyFilter>] applique les exigences relatives à l’interface et au constructeur par le biais de contraintes génériques. Par conséquent, seules les vérifications de type générique et « au plus un fournisseur » s’appliquent toujours à celui-ci.

[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;
}

Comment corriger les violations

Ajoutez un constructeur sans paramètre public ou ajustez le type afin qu’il soit non générique, instanciable, implémente ITestFilteret possède un constructeur sans paramètre public.

public sealed class MyFilter : ITestFilter
{
    public TestFilterResult Filter(TestFilterContext context) => TestFilterResult.Run;
}

Quand supprimer les avertissements

Ne supprimez pas les avertissements de cette règle. Une violation échoue toute l’exécution du test au moment de l’exécution plutôt que seulement le filtre lui-même.

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 MSTEST0081
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0081

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.MSTEST0081.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements d’analyse du code.

Voir aussi