MSTEST0083: utilisez '[ExecutableCondition]' au lieu de vérifier avec 'File.Exists' avant 'Process.Start'

Propriété Value
Identificateur de la règle MSTEST0083
Titre Utilisez « [ExecutableCondition] » au lieu des vérifications « File.Exists » avant « Process.Start ».
Catégorie Utilisation
Le correctif a un effet disruptif ou non disruptif Non-breaking
Activé par défaut Oui
Sévérité par défaut Informations
Introduit dans la version 4.4.0 (préversion)
Existe-t-il une correction de code Oui, pour C# uniquement

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

Une méthode de test vérifie d’abord si un exécutable existe et retourne ou appelle Assert.Inconclusive quand ce n’est pas le cas, puis appelle Process.Start avec le même chemin d’accès exécutable.

Description de la règle

Permet [ExecutableCondition] de déclarer qu’un test nécessite un exécutable. L’attribut signale le test comme ignoré lorsque MSTest ne peut pas résoudre l’exécutable. Un retour anticipé signale incorrectement le test tel qu’il est passé, et une vérification impérative masque l’exigence des outils de découverte et de création de rapports.

[TestMethod]
public void RunsTool()
{
    if (!File.Exists("tool.exe")) return; // Violation
    Process.Start("tool.exe");
}

L’analyseur reconnaît une clause de garde en début d’instruction sans branche else significative lorsque File.Exists et Process.Start ultérieurement utilisent tous deux le même chemin d’exécution constant.

Comment corriger les violations

Remplacez la garde par [ExecutableCondition].

[TestMethod]
[ExecutableCondition("tool.exe")]
public void RunsTool() => Process.Start("tool.exe");

Une correction de code C# remplace la clause de garde par l’attribut. Visual Basic signale le diagnostic, mais ne fournit pas de correctif automatique.

Quand supprimer les avertissements

Supprimez la règle lorsque la vérification du fichier valide les données plutôt qu’un prérequis exécutable, ou lorsque le test a besoin d’un comportement qui ExecutableConditionAttribute ne peut pas exprimer.

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

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

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

Voir aussi