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 | 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.