Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| Property | Value |
|---|---|
| ID da regra | MSTEST0077 |
| Título | Evite caminhos de sistema de ficheiros codificados ou partilhados num teste paralelizado |
| Category | Usage |
| A correção é invasiva ou não invasiva | Inquebrável |
| Ativado por padrão | Sim |
| Severidade padrão | Informações |
| Introduzido na versão | 4.4.0 (pré-visualização) |
| Existe uma correção de código | Não |
Importante
TestContext.TestTempDirectory está planeado para o MSTest 4.4 e está disponível apenas em versões pré-visualizadas até ao lançamento do MSTest 4.4.0.
Note
Este analisador ativa apenas quando a paralelização assembly está sintaticamente habilitada, por exemplo através de [assembly: Parallelize] sem um correspondente [assembly: DoNotParallelize], ou quando um .editorconfig ficheiro define mstest_parallel_safety_mode = always. O analisador não consegue detetar paralelização que está ativada apenas através .runsettings de propriedades do MSBuild como MSTestParallelizeWorkers. Define a .editorconfig opção se configurares a paralelização dessa forma e ainda quiseres que este analisador corra.
Motivo
Um teste passa um caminho absoluto constante, ou um literal de caminho relativo, diretamente para um método de File.*/Directory.* mutação do sistema de ficheiros, como File.WriteAllText ou .Directory.CreateDirectory
Descrição da regra
Um caminho codificado fixamente ou relativamente constante tem como alvo uma localização partilhada por todos os outros testes na montagem. Sob paralelização em montagem, dois testes podem então escrever simultaneamente no mesmo local e colidir.
[TestMethod]
public void WritesReport()
{
File.WriteAllText("report.txt", contents); // Violation
}
Apenas os caminhos estaticamente constantes passados para uma API em mutação são sinalizados. Leituras, construção de caminhos e caminhos construídos a partir de variáveis ficam para rever manualmente, porque o analisador não consegue dizer se dois testes realmente colidem num caminho calculado.
Como corrigir violações
Use uma localização única 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 este aviso se o caminho visar intencionalmente um fixture que todos os testes leem mas nenhum teste escreve simultaneamente, ou se os testes que escrevem nele já estiverem coordenados, por exemplo através de [DoNotParallelize].
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.
#pragma warning disable MSTEST0077
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0077
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade 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.