MSTEST0074 : tester le mutage de l’état global du processus doit déclarer un verrou de ressource

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.

Voir aussi