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 | MSTEST0074 |
| Titre | Tester le mutage de l’état global du processus doit déclarer un verrou de ressource |
| 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, elle s’exécute sous, appelle Environment.SetEnvironmentVariable ou/Console.SetOutSetErrorSetIn/ sans correspondance [ResourceLock] ou .[DoNotParallelize]
Description de la règle
Le mutation de l’état global du processus, tel que les variables d’environnement ou la redirection de console, à partir d’un test est dangereux une fois la parallélisation in-assembly activée, car un test frère exécuté simultanément observe la mutation. Contrairement [ResourceLock]à , ce qui échoue lorsqu’une clé est oubliée, cette règle signale la mutation au moment de la compilation.
[TestMethod]
public void SetsVariable()
{
Environment.SetEnvironmentVariable("MODE", "test"); // Violation
}
Comment corriger les violations
Déclarez [ResourceLock] avec la clé correspondante WellKnownResources pour sérialiser les tests en cours ou ajoutez [DoNotParallelize] pour refuser le test de parallélisation.
[ResourceLock(WellKnownResources.EnvironmentVariables)]
[TestMethod]
public void SetsVariable()
{
Environment.SetEnvironmentVariable("MODE", "test");
}
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 MSTEST0074
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0074
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.MSTEST0074.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements d’analyse du code.