Compartilhar via


Configurar o MSTest

MSTest, Microsoft Testing Framework, é uma estrutura de teste para aplicativos .NET. Ele permite que você escreva e execute testes e forneça suítes de testes com integração ao Visual Studio e Visual Studio Code Test Explorers, à CLI do .NET e a muitos pipelines de CI.

MSTest é uma estrutura de teste de código aberto e de plataforma cruzada totalmente compatível que funciona com todos os destinos .NET suportados (.NET Framework, .NET Core, .NET, UWP, WinUI e assim por diante) hospedados no GitHub.

Runsettings

O arquivo .runsettings pode ser usado para configurar como serão executados os testes de unidade. Para saber mais sobre as configurações de execução e as configurações relacionadas à plataforma, você pode conferir a documentação de configurações de execução do VSTest ou a documentação de configurações de execução do executor do MSTest.

Elemento MSTest

As seguintes entradas runsettings permitem configurar como o MSTest se comporta.

Configuração Padrão Valores
AssemblyCleanupTimeout 0 Especifique globalmente o tempo limite a ser aplicado em cada instância do método de limpeza do assembly. O atributo [Timeout] especificado no método de limpeza do assembly substitui o tempo limite global.
AssemblyInitializeTimeout 0 Especifique globalmente o tempo limite a ser aplicado a cada instância do método de inicialização do assembly. O atributo [Timeout] especificado no método de inicialização do assembly substitui o tempo limite global.
AssemblyResolution false É possível especificar caminhos para assemblies extras ao localizar e executar testes de unidade. Por exemplo, use esses caminhos para assemblies de dependência que não estão no mesmo diretório do assembly de teste. Para especificar um caminho, use um elemento Caminho do Diretório. Os caminhos podem incluir variáveis de ambiente.

<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>

Esse recurso só é aplicado ao usar um destino .NET Framework.
CaptureTraceOutput true Captura mensagens de texto provenientes das APIs Console.Write*, Trace.Write*, e Debug.Write* que serão associadas ao teste em execução atual.
ClassCleanupLifecycle EndOfClass Se você quiser que a limpeza de classe ocorra no final do assembly, defina a opção como EndOfAssembly. (Não há mais suporte do MSTest v4 em diante, pois EndOfClass é o comportamento único e padrão de ClassCleanup)
ClassCleanupTimeout 0 Especifique globalmente o tempo limite a ser aplicado a cada instância do método de limpeza de classes. [Timeout] O atributo especificado no método de limpeza da classe substitui o tempo limite global.
ClassInitializeTimeout 0 Especifique globalmente o tempo limite a ser aplicado a cada instância do método de inicialização de classes. [Timeout] O atributo especificado no método de inicialização da classe substitui o tempo limite global.
DeleteDeploymentDirectoryAfterTestRunIsComplete true Para reter o diretório de implantação após uma execução de teste, defina esse valor como false.
DeploymentEnabled true Se você definir o valor como false, os itens de implantação especificados em seu método de teste não serão copiados para o diretório de implantação.
DeployTestSourceDependencies true Um valor que indica se as referências de origem de teste devem ser implantadas.
EnableBaseClassTestMethodsFromOtherAssemblies true Um valor que indica se é necessário habilitar a descoberta de métodos de teste de classes base em um assembly diferente da classe de teste herdada.
ForcedLegacyMode false Nas versões mais antigas do Visual Studio, o adaptador MSTest foi otimizado para torná-lo mais rápido e mais escalonável. Alguns comportamentos, como a ordem em que os testes são executados, não podem ser exatamente iguais aos de edições anteriores do Visual Studio. Defina o valor como true para usar o adaptador de teste mais antigo.

Por exemplo, você poderá usar essa configuração se tiver um arquivo app.config especificado para um teste de unidade.

Recomendamos que você considere refatorar seus testes para permitir o uso do adaptador mais recente.
MapInconclusiveToFailed false Se um teste for concluído com um status inconclusivo, ele será mapeado para o status Ignorado no Gerenciador de Testes. Caso deseje que os testes inconclusivos sejam mostrados como com falha, defina esse valor como true.
MapNotRunnableToFailed true Um valor que indica se um resultado não executável será mapeado para o teste com falha.
Parallelize Usado para definir as configurações de paralelização:

Workers: o número de threads/funções de trabalho a serem usadas para paralelização, que é, por padrão, o número de processadores no computador atual.

SCOPE: o escopo da paralelização. Você pode defini-lo como MethodLevel. Por padrão, é ClassLevel.

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
SettingsFile Especifique um arquivo de configurações do teste para usar com o adaptador MSTest aqui. Você também pode especificar um arquivo de configurações do teste no menu de configurações.

Se você especificar esse valor, também será necessário definir o ForcedLegacyMode como true.

<ForcedLegacyMode>true</ForcedLegacyMode>
TestCleanupTimeout 0 Especifique globalmente o tempo limite a ser aplicado a cada instância do método de limpeza de testes. O atributo [Timeout] especificado no método de limpeza de testes substitui o tempo limite global.
TestInitializeTimeout 0 Especifique globalmente o tempo limite a ser aplicado a cada instância do método de inicialização de testes. O atributo [Timeout] especificado no método de inicialização de testes substitui o tempo limite global.
TestTimeout 0 Obtém o tempo limite de caso de teste global especificado.
TreatClassAndAssemblyCleanupWarningsAsErrors false Para ver as falhas nas limpezas de classe como erros, defina esse valor como true.
TreatDiscoveryWarningsAsErrors false Para relatar avisos de descoberta de teste como erros, defina este valor como true.
ConsiderFixturesAsSpecialTests false Para exibir AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup como entradas individuais no log do Visual Studio e do Visual Studio Code Test Explorer e .trx, defina esse valor como true

Elemento TestRunParameter

<TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>

Os parâmetros de execução de teste fornecem uma maneira de definir variáveis e valores disponíveis para os testes no tempo de execução. Acesse os parâmetros usando a propriedade TestContext.Properties do MSTest:

private string _appUrl;
public TestContext TestContext { get; set; }

[TestMethod]
public void HomePageTest()
{
    string _appUrl = TestContext.Properties["webAppUrl"];
}

Para usar parâmetros de execução de teste, adicione uma propriedade TestContext pública à classe de teste.

Arquivo .runsettings de exemplo

O XML a seguir mostra o conteúdo de um arquivo .runsettings típico. Copie esse código e edite-o para atender às suas necessidades.

Cada elemento do arquivo é opcional, porque tem um valor padrão.

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>

  <!-- Parameters used by tests at run time -->
  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>

  <!-- MSTest -->
  <MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>false</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>False</DeploymentEnabled>
    <ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
  </MSTest>

</RunSettings>