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 | MSTEST0077 |
| Titolo | Evitare percorsi del file system codificati in modo statico o condivisi in un test parallelizzato |
| Categoria | Utilizzo |
| La modifica è dirompente o non dirompente | Non rompente |
| Abilitato per impostazione predefinita | Sì |
| Gravità predefinita | Informazioni |
| introdotta nella versione | 4.4.0 |
| È presente una correzione del codice | No |
Note
Questo analizzatore viene attivato solo quando la parallelizzazione dell'assembly è abilitata sintatticamente, ad esempio tramite [assembly: Parallelize] senza un [assembly: DoNotParallelize] corrispondente, oppure quando un file .editorconfig imposta mstest_parallel_safety_mode = always. L'analizzatore non riesce a rilevare la parallelizzazione che è abilitata solo mediante .runsettings o proprietà di MSBuild come MSTestParallelizeWorkers. Imposta l'opzione .editorconfig se configuri la parallelizzazione in questo modo e vuoi comunque eseguire questo analizzatore.
Cause
Un test passa direttamente un percorso assoluto costante o un percorso relativo letterale a un metodo File.*/Directory.* che modifica il file system, ad esempio File.WriteAllText o Directory.CreateDirectory.
Descrizione della regola
Un percorso costante codificato in modo statico o relativo punta a una posizione condivisa da tutti gli altri test nell'assembly. Con la parallelizzazione all’interno dell’assembly, due test possono quindi scrivere contemporaneamente nella stessa posizione ed entrare in conflitto.
[TestMethod]
public void WritesReport()
{
File.WriteAllText("report.txt", contents); // Violation
}
Vengono contrassegnati solo i percorsi staticamente costanti passati a un'API che modifica i dati. Le letture, la costruzione del percorso e i percorsi compilati dalle variabili vengono lasciati da esaminare manualmente, perché l'analizzatore non è in grado di indicare se due test si scontrano effettivamente su un percorso calcolato.
Come correggere le violazioni
Usare un percorso univoco per test, ad esempio TestContext.TestTempDirectory, anziché un percorso fisso o relativo.
[TestMethod]
public void WritesReport()
{
string path = Path.Combine(TestContext.TestTempDirectory!, "report.txt");
File.WriteAllText(path, contents);
}
Quando eliminare gli avvisi
È possibile ignorare questo avviso se il percorso punta intenzionalmente a una fixture che ogni test legge, ma su cui nessun test scrive contemporaneamente, oppure se i test che vi scrivono sono già coordinati, ad esempio tramite [DoNotParallelize].
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 MSTEST0077
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0077
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.MSTEST0077.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.