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 | MSTEST0075 |
| Titre | Éviter de modifier le répertoire actif dans un test parallélisé |
| Category | Usage |
| Le correctif a un effet disruptif ou non disruptif | Non-breaking |
| Activé par défaut | Yes |
| 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
ResourceLockAttribute est prévu pour MSTest 4.4 et est disponible uniquement dans les versions préliminaires jusqu’à la publication de MSTest 4.4.0.
Note
Cet analyseur s’active uniquement lorsque la parallélisation d’assembly est activée de manière syntactique, par exemple [assembly: Parallelize] sans correspondance [assembly: DoNotParallelize], ou lorsqu’un .editorconfig fichier définit mstest_parallel_safety_mode = always. L’analyseur ne peut pas détecter la parallélisation activée uniquement par le biais .runsettings de propriétés MSBuild telles que MSTestParallelizeWorkers. Définissez l’option si vous configurez la parallélisation de cette .editorconfig façon et souhaitez toujours que cet analyseur s’exécute.
Cause
Un test, ou une méthode de montage délimitée par une classe, s’exécute sous, appelle Directory.SetCurrentDirectory ou affecte Environment.CurrentDirectory sans correspondance [ResourceLock] ni [DoNotParallelize].
Description de la règle
Le répertoire actif est global sur chaque système d’exploitation et, contrairement à la culture, n’a pas d’équivalent à portée de thread ou asynchrone. Test qui modifie le répertoire de travail de chaque test en cours d’exécution simultanément, et les chemins relatifs résolus ailleurs dans la suite pointent silencieusement à un emplacement incorrect.
[TestMethod]
public void ChangesDirectory()
{
Directory.SetCurrentDirectory(tempPath); // Violation
}
Comment corriger les violations
Déclarez pour [ResourceLock(WellKnownResources.CurrentDirectory)] sérialiser les tests en cours ou ajoutez-y [DoNotParallelize] pour refuser le test de parallélisation. Même avec un verrou, préférez passer des chemins absolus afin que le répertoire actuel n’ait jamais besoin de changer.
[ResourceLock(WellKnownResources.CurrentDirectory)]
[TestMethod]
public void ChangesDirectory()
{
Directory.SetCurrentDirectory(tempPath);
}
Un correctif de code C# ajoute l’attribut [ResourceLock] pour vous, à la méthode de test ou, pour un élément d’étendue de classe tel que [TestInitialize], à la classe de test. Visual Basic code a ce diagnostic, mais n'a pas de correctif automatique ; ajoutez l'attribut manuellement.
Quand supprimer les avertissements
Ne supprimez pas les avertissements de cette règle sans déclarer un verrou ou refuser la parallélisation, car cela laisse la mutation s’enfuir silencieusement contre les tests en cours d’exécution simultanée.
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 MSTEST0075
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0075
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.MSTEST0075.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements d’analyse du code.