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 | MSTEST0076 |
| Título | Evitar a mutação da cultura em todo o processo 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 |
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 ou um método de instalação com escopo de classe em que ele é executado, atribui DefaultThreadCurrentCulture ou DefaultThreadCurrentUICulture sem uma correspondência [ResourceLock] ou [DoNotParallelize].
Descrição da regra
CultureInfo.DefaultThreadCurrentCulture e DefaultThreadCurrentUICulture defina a cultura padrão para todo o processo, de modo que cada teste em execução simultânea observe a alteração, e a formatação ou análise pode ser corrompida. Os formulários Thread.CurrentThread.CurrentCulture/CurrentUICulture por thread e ambiente eCurrentUICultureCultureInfo.CurrentCulture/ , não são sinalizados: em .NET modernos, eles atribuem um AsyncLocalvalor com suporte que flui com o contexto de execução, para que eles não corrompam testes irmãos.
[TestMethod]
public void SetsCulture()
{
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture; // Violation
}
Como os setters sinalizados são de todo o processo, restaurar o valor anterior em um finally bloco não ajuda: a execução simultânea de testes ainda observa a cultura alterada durante a mutação.
Como corrigir violações
Adicione [DoNotParallelize] no teste ou evite alterar a cultura em todo o processo e use as propriedades de cultura por thread ou ambiente.
[DoNotParallelize]
[TestMethod]
public void SetsCulture()
{
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
}
Nenhuma chave conhecida [ResourceLock] existe para a cultura, portanto, uma declaração [ResourceLock] de qualquer tipo é tratada como um reconhecimento de que você coordenou o acesso à cultura, e essa regra permanece em silêncio.
Quando suprimir avisos
Não suprime avisos dessa regra sem recusar a paralelização ou alternar para as propriedades da cultura por thread, pois isso deixa a mutação correndo silenciosamente contra a execução simultânea de testes.
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 MSTEST0076
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0076
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.MSTEST0076.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.