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. |
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 |
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. |
OrderTestsByNameInClass | false | Se você quiser executar testes por nomes de teste nos Exploradores de Teste e na linha de comando, defina esse valor como verdadeiro. |
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. |
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>
testconfig.json
Ao executar seus testes com o MSTest, você pode usar um arquivo testconfig.json
para configurar o comportamento do executor de teste. O arquivo testconfig.json
é um arquivo JSON que contém as configurações do executor de teste. O arquivo é usado para configurar o executor de teste e o ambiente de execução de teste. Para obter mais informações, consulte a documentação Microsoft.Testing.Platform testconfig.json.
A partir do MSTest 3.7, você também pode configurar as execuções do MSTest no mesmo arquivo de configuração. As seções a seguir descrevem as configurações que você pode usar no arquivo testconfig.json
.
Elemento MSTest
As configurações do MSTest são agrupadas pela funcionalidade descrita nas seções a seguir.
Entry | Padrão | Descrição |
---|---|---|
ordenarTestesPorNomeNaClasse | false | Se você quiser executar testes por nomes de teste nos Exploradores de Teste e na linha de comando, defina esse valor como verdadeiro. |
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. |
classCleanupLifecycle | EndOfAssembly | Se você quiser que a limpeza de classe ocorra no final da classe, defina-a como EndOfClass. |
Configurações de AssemblyResolution
Entry | Padrão | Descrição |
---|---|---|
Caminhos | Nenhum | É 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. Você pode especificar um caminho na forma { "path": "...", "includeSubDirectories": "true/false" } . |
Configurações de implantação
Entry | Padrão | Descrição |
---|---|---|
excluirDiretorioDeImplantacaoAposConclusaoDoTeste | true | Para reter o diretório de implantação após uma execução de teste, defina esse valor como false. |
deployTestSourceDependencies | true | Indica se as referências de origem de teste devem ser implantadas. |
Habilitado | 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. |
Configurações de saída
Entry | Padrão | Descrição |
---|---|---|
captureTrace | false | Captura mensagens de texto provenientes das APIs Console.Write* , Trace.Write* , e Debug.Write* que serão associadas ao teste em execução atual. |
Configurações de paralelismo
Entry | Padrão | Descrição |
---|---|---|
Habilitado | false | Habilite a paralelização de teste. |
scope | classe | O escopo da paralelização. Você pode defini-lo como method . O padrão, class , corresponde à execução de todos os testes de uma determinada classe sequencialmente, mas múltiplas classes ao mesmo tempo. |
Trabalhadores | 0 | O número de threads/trabalhadores usados para paralelização. O valor padrão corresponde ao número de processadores no computador atual. |
Configurações de execução
Entry | Padrão | Descrição |
---|---|---|
considerEmptyDataSourceAsInconclusive | false | Quando definido como true , uma fonte de dados vazia é considerada inconclusiva. |
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. |
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. |
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. |
Configurações de tempo limite
Entry | Padrão | Descrição |
---|---|---|
assemblyCleanup | 0 | Especifique globalmente o tempo limite a ser aplicado em cada instância do método de limpeza do assembly. |
assemblyInitialize | 0 | Especifique globalmente o tempo limite a ser aplicado a cada instância do método de inicialização do assembly. |
classCleanup | 0 | Especifique globalmente o tempo limite a ser aplicado a cada instância do método de limpeza de classes. |
classInitialize | 0 | Especifique globalmente o tempo limite a ser aplicado a cada instância do método de inicialização de classes. |
teste | 0 | Especifique globalmente o tempo limite de teste. |
testCleanup | 0 | Especifique globalmente o tempo limite a ser aplicado a cada instância do método de limpeza de testes. |
testInitialize | 0 | Especifique globalmente o tempo limite a ser aplicado a cada instância do método de inicialização de testes. |
useCooperativeCancellation | false | Quando configurado para true , em caso de tempo de espera, o MSTest executará somente o cancelamento do CancellationToken , mas não deixará de observar o método. Esse comportamento é mais eficiente, mas depende do usuário encaminhar corretamente o token por todos os caminhos. |
Nota
O atributo [Timeout]
, especificado em um método, substitui o tempo limite global. Por exemplo, [Timeout(1000)]
em um método marcado com [AssemblyCleanup] irá substituir o tempo limite global de assemblyCleanup
.
Exemplo testconfig.json arquivo
O JSON a seguir mostra o conteúdo de um arquivo de .testconfig.json 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.
{
"platformOptions": {
},
"mstest": {
"execution": {
"mapInconclusiveToFailed" : true,
"disableAppDomain": true,
"considerFixturesAsSpecialTests" : false,
},
"parallelism" : {
"enabled": true,
"scope": "method",
},
"output": {
"captureTrace": false
}
}
}