MSTEST0077: evitare percorsi di file system hardcoded o condivisi in un test parallelizzato

Proprietà Value
ID regola MSTEST0077
Titolo Evitare percorsi di file system hardcoded o condivisi in un test parallelizzato
Categoria Utilizzo
La modifica è dirompente o non dirompente Non rompente
Abilitato per impostazione predefinita
Gravità predefinita Informazioni
introdotta nella versione 4.4.0 (anteprima)
È presente una correzione del codice No

Importante

TestContext.TestTempDirectory è 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 passa un percorso assoluto costante o un valore letterale percorso relativo direttamente a un metodo di modifica del File.*/Directory.* file system, ad esempio File.WriteAllText o Directory.CreateDirectory.

Descrizione della regola

Un percorso costante hardcoded o relativo è destinato a una posizione condivisa da ogni altro test nell'assembly. In parallelizzazione in assembly, due test possono quindi scrivere nella stessa posizione contemporaneamente e conflitto.

[TestMethod]
public void WritesReport()
{
    File.WriteAllText("report.txt", contents); // Violation
}

Vengono contrassegnati solo percorsi costanti statici passati a un'API di modifica. 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 eliminare questo avviso se il percorso è destinato intenzionalmente a una fixture che ogni test legge ma non scrive test contemporaneamente o se i test che scrivono in esso 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.

Vedere anche