Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| Property | Value |
|---|---|
| ID da regra | MSTEST0077 |
| Título | Evitar caminhos de sistema de arquivos codificados ou compartilhados em um teste paralelizado |
| Categoria | Uso |
| Correção é disruptiva ou não disruptiva | Inquebrável |
| Habilitado por padrão | Sim |
| Severidade padrão | Informações |
| introduzido na versão | 4.4.0 (versão prévia) |
| Há uma correção de código | Não |
Importante
TestContext.TestTempDirectory é planejado para MSTest 4.4 e está disponível apenas em builds de visualização até que o MSTest 4.4.0 seja lançado.
Note
Esse analisador é ativado somente quando a paralelização do assembly está habilitada sintaticamente, por exemplo [assembly: Parallelize] , sem correspondência [assembly: DoNotParallelize]ou quando um .editorconfig arquivo é configurado mstest_parallel_safety_mode = always. O analisador não pode detectar a paralelização habilitada apenas por meio .runsettings ou propriedades do MSBuild, como MSTestParallelizeWorkers. Defina a opção .editorconfig se você configurar a paralelização dessa maneira e ainda quiser que esse analisador seja executado.
Cause
Um teste passa um caminho absoluto constante ou um literal de caminho relativo diretamente para um método de mutação File.*/Directory.* do sistema de arquivos, como File.WriteAllText ou Directory.CreateDirectory.
Descrição da regra
Um caminho constante codificado ou relativo tem como destino um local compartilhado por todos os outros testes no assembly. Em paralelização no assembly, dois testes podem gravar no mesmo local simultaneamente e colidir.
[TestMethod]
public void WritesReport()
{
File.WriteAllText("report.txt", contents); // Violation
}
Somente caminhos estaticamente constantes passados para uma API em mutação são sinalizados. Leituras, construção de caminho e caminhos criados a partir de variáveis são deixados para você revisar manualmente, pois o analisador não pode informar se dois testes realmente colidem em um caminho computado.
Como corrigir violações
Use um local exclusivo por teste, como TestContext.TestTempDirectory, em vez de um caminho fixo ou relativo.
[TestMethod]
public void WritesReport()
{
string path = Path.Combine(TestContext.TestTempDirectory!, "report.txt");
File.WriteAllText(path, contents);
}
Quando suprimir avisos
É seguro suprimir esse aviso se o caminho direcionar intencionalmente a um dispositivo que cada teste lê, mas nenhum teste é gravado simultaneamente ou se os testes que gravam nele já estiverem coordenados, por exemplo.[DoNotParallelize]
Suprimir um aviso
Se você quiser suprimir apenas uma única violação, adicione diretivas de pré-processador ao arquivo de origem para desabilitar a regra e, em seguida, habilitá-la novamente.
#pragma warning disable MSTEST0077
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0077
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0077.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.