Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | Value |
|---|---|
| ID regola | MSTEST0074 |
| Titolo | Testare lo stato globale del processo di modifica deve dichiarare un blocco di risorse |
| Categoria | Utilizzo |
| La modifica è dirompente o non dirompente | Non rompente |
| Abilitato per impostazione predefinita | Sì |
| Gravità predefinita | Informazioni |
| introdotta nella versione | 4.4.0 (anteprima) |
| È presente una correzione del codice | Sì, solo per C# |
Importante
ResourceLockAttribute è pianificato per MSTest 4.4 ed è disponibile solo nelle build di anteprima fino al rilascio di MSTest 4.4.0.
Note
Questo analizzatore viene attivato solo quando la parallelizzazione dell'assembly è abilitata sintatticamente, ad esempio senza [assembly: Parallelize] una corrispondenza [assembly: DoNotParallelize]o quando un .editorconfig file imposta mstest_parallel_safety_mode = always. L'analizzatore non riesce a rilevare la parallelizzazione abilitata solo tramite .runsettings o le proprietà di MSBuild, MSTestParallelizeWorkersad esempio . Impostare l'opzione .editorconfig se si configura la parallelizzazione in questo modo e si vuole comunque che l'analizzatore venga eseguito.
Cause
Un test o un metodo di fixture con ambito classe in cui viene eseguito, chiama Environment.SetEnvironmentVariable o Console.SetOut/SetErrorSetIn/senza corrispondenza [ResourceLock] o .[DoNotParallelize]
Descrizione della regola
La modifica dello stato globale del processo, ad esempio variabili di ambiente o reindirizzamento della console, da un test non è sicura una volta abilitata la parallelizzazione nell'assembly, perché un test di pari livello in esecuzione osserva simultaneamente la mutazione. A differenza di [ResourceLock], che ha esito negativo quando viene dimenticata una chiave, questa regola contrassegna la mutazione in fase di compilazione.
[TestMethod]
public void SetsVariable()
{
Environment.SetEnvironmentVariable("MODE", "test"); // Violation
}
Come correggere le violazioni
Dichiarare [ResourceLock] con la chiave corrispondente WellKnownResources per serializzare i test concorrenti o aggiungere [DoNotParallelize] per rifiutare esplicitamente il test fuori dalla parallelizzazione.
[ResourceLock(WellKnownResources.EnvironmentVariables)]
[TestMethod]
public void SetsVariable()
{
Environment.SetEnvironmentVariable("MODE", "test");
}
Una correzione del codice C# aggiunge automaticamente l'attributo [ResourceLock] al metodo di test o per una fixture con ambito classe, ad [TestInitialize]esempio , nella classe di test. Visual Basic codice include questa diagnostica, ma non ha una correzione automatica. Aggiungere l'attributo a mano.
Quando eliminare gli avvisi
Non eliminare gli avvisi da questa regola senza dichiarare un blocco o rifiutare esplicitamente la parallelizzazione, perché in questo modo la mutazione corre automaticamente contro i test contemporaneamente in esecuzione.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable MSTEST0074
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0074
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità su none nel file di configurazione .
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0074.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.