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.
MSTest, Microsoft Testing Framework, é uma estrutura de teste para aplicativos .NET. Ele permite que você escreva e execute testes e forneça pacotes de teste com integração com Visual Studio e Visual Studio Code Test Explorers, a CLI do .NET e muitos pipelines de CI.
O MSTest é uma estrutura de teste totalmente suportada, de código aberto e multiplataforma que funciona com todos os destinos .NET suportados (.NET Framework, .NET Core, .NET, UWP, WinUI e assim por diante) hospedados no GitHub.
Configurações de execução
Um arquivo .runsettings pode ser usado para configurar como os testes de unidade estão sendo executados. Para saber mais sobre as definições de execução e as configurações relacionadas com a plataforma, pode consultar a documentação sobre definições de execução do VSTest ou a documentação sobre definições de execução do MSTest runner.
Elemento MSTest
As seguintes entradas runsettings permitem configurar como o MSTest se comporta.
Configuração | Predefinido | Valores |
---|---|---|
AssemblyCleanupTimeout | 0 | Defina o tempo limite global a ser aplicado em cada instância do método de limpeza de assemblagem.
[Timeout] o atributo especificado no método de limpeza do conjunto substitui o tempo limite global. |
AssemblyInitializeTimeout | 0 | Especifique o tempo limite global a ser aplicado em 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. |
Resolução da Assembleia | falso | Você pode especificar caminhos para assemblies extras ao localizar e executar testes de unidade. Por exemplo, use esses caminhos para assemblies de dependências que não estão no mesmo diretório que o assembly de teste. Para especificar um caminho, use um elemento Directory Path . 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 do .NET Framework. |
CaptureTraceOutput | verdadeiro | Capture mensagens de texto provenientes do Console.Write* , Trace.Write* e Debug.Write* APIs que serão associadas ao teste em execução atual. |
ClassCleanupLifecycle | Fim de Aula | Se desejar que a limpeza de classe ocorra no final da montagem, defina-a como EndOfAssembly. (Não há mais suporte a partir do MSTest v4, visto que EndOfClass é o comportamento padrão e único de ClassCleanup) |
ClassCleanupTimeout | 0 | Especifique globalmente o tempo limite para aplicar em cada instância do método de limpeza da classe. O [Timeout] atributo especificado no método de limpeza da classe substitui o tempo limite global. |
ClassInitializeTimeout | 0 | Especifique globalmente o tempo limite a ser aplicado em cada instância do método de inicialização de classe.
[Timeout] atributo especificado no método de inicialização de classe substitui o tempo limite global. |
ConsiderarFixturesComoTestesEspeciais | falso | Para exibir AssemblyInitialize , AssemblyCleanup , ClassInitialize , ClassCleanup como entradas individuais no Visual Studio e no Visual Studio Code Test Explorer no log .trx, defina esse valor como true |
ApagarDiretórioDeImplantaçãoApósExecuçãoDoTesteConcluída | verdadeiro | Para manter o diretório de implantação após uma execução de teste, defina esse valor como false. |
ImplementaçãoAtivada | verdadeiro | Se você definir o valor como false, os itens de implantação especificados no método de teste não serão copiados para o diretório de implantação. |
DeployTestSourceDependencies | verdadeiro | Um valor que indica se as referências de origem do teste devem ser implantadas. |
AtivarMétodosDeTesteDaClasseBaseDeOutrasAssemblies | verdadeiro | Um valor que indica se a descoberta de métodos de teste de classes base deve ser habilitada em um assembly diferente da classe de teste herdeira. |
ForcedLegacyMode | falso | Em versões mais antigas do Visual Studio, o adaptador MSTest foi otimizado para torná-lo mais rápido e escalável. Alguns comportamentos, como a ordem em que os testes são executados, podem não ser exatamente como era em edições anteriores do Visual Studio. Defina o valor como true para usar o adaptador de teste mais antigo. Por exemplo, você pode usar essa configuração se tiver um arquivo app.config especificado para um teste de unidade. Recomendamos que você considere a refatoração de seus testes para permitir que você use o adaptador mais recente. |
MapInconclusiveToFailed | falso | Se um teste for concluído com um status inconclusivo, ele será mapeado para o status ignorado no Gerenciador de Testes. Se você quiser que testes inconclusivos sejam mostrados como reprovados, defina o valor como true. |
MapearNãoExecutávelParaFalha | verdadeiro | Um valor que indica se um resultado não executável é mapeado para um teste falhado. |
OrdenarTestesPorNomeNaClasse | falso | Se você quiser executar testes por nomes de teste nos Exploradores de Teste e na linha de comando, defina esse valor como true. |
Paralelizar | Usado para definir as configurações de paralelização: Trabalhadores: O número de threads/trabalhadores a serem usados para paralelização, que é, por padrão , o número de processadores na máquina atual. ESCOPO: O escopo da paralelização. Você pode defini-lo como MethodLevel. Por padrão, é ClassLevel. <Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize> |
|
ArquivoDeConfigurações | Você pode especificar um arquivo de configurações de teste para usar com o adaptador MSTest aqui. Você também pode especificar um arquivo de configurações de teste no menu de configurações. Se você especificar esse valor, também deverá definir o ForcedLegacyMode como true. <ForcedLegacyMode>true</ForcedLegacyMode> |
|
TestCleanupTimeout | 0 | Especifique globalmente o tempo limite a ser aplicado em cada instância do método de limpeza de teste.
[Timeout] o atributo especificado no método de limpeza de teste substitui o tempo limite global. |
TestInitializeTimeout | 0 | Especifique globalmente o tempo limite a ser aplicado em cada instância do método de inicialização de teste.
[Timeout] atributo especificado no método de inicialização de teste substitui o tempo limite global. |
TestTimeout | 0 | Obtém o limite de tempo global especificado do caso de teste. |
TratarAvisosDeLimpezaDeClasseEAssemblagemComoErros | falso | Para ver suas falhas nas limpezas de classe como erros, defina esse valor como true. |
TratarAvisosDeDescobertaComoErros | falso | Para relatar avisos de descoberta de teste como erros, defina esse valor como true. |
TestRunParameter
elemento
<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 que estão disponíveis para os testes em tempo de execução. Acesse os parâmetros usando a propriedade MSTest TestContext.Properties :
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 pública TestContext à sua classe de teste.
Exemplo de arquivo .runsettings
O XML a seguir mostra o conteúdo de um arquivo .runsettings típico. Copie este código e edite-o de acordo com as 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 de testconfig.json
para configurar o comportamento do executor de teste. O arquivo testconfig.json
é um arquivo JSON que contém as definições de configuração para o executor de teste. O arquivo é usado para configurar o executor de teste e o ambiente de execução de teste. Para mais informações, consulte a documentação da testconfig.json Microsoft.Testing.Platform.
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 por funcionalidade descrita nas seções a seguir.
Entrada | Predefinido | Descrição |
---|---|---|
ordenarTestesPorNomeNaClasse | falso | Se você quiser executar testes por nomes de teste nos Exploradores de Teste e na linha de comando, defina esse valor como true. |
ativarMétodosDeTesteDaClasseBaseDeOutrasAssemblies | verdadeiro | Um valor que indica se a descoberta de métodos de teste de classes base deve ser habilitada em um assembly diferente da classe de teste herdeira. |
classCleanupLifecycle | Fim da Montagem | Se você quiser que a limpeza de classe ocorra no final da classe, defina-a como EndOfClass. |
assemblyResolution
configurações
Todas as configurações nesta seção pertencem ao elemento assemblyResolution
.
Entrada | Predefinido | Descrição |
---|---|---|
Caminhos | Nenhum | Você pode especificar caminhos para assemblies extras ao localizar e executar testes de unidade. Por exemplo, use esses caminhos para assemblies de dependências que não estão no mesmo diretório que o assembly de teste. Você pode especificar um caminho na forma { "path": "...", "includeSubDirectories": "true/false" } . |
Exemplo:
{
"mstest": {
"assemblyResolution": {
{ "path": "...", "includeSubDirectories": "true/false" }
}
}
}
deployment
configurações
Todas as configurações nesta seção pertencem ao elemento deployment
.
Entrada | Predefinido | Descrição |
---|---|---|
excluirDiretórioDeDesenvolvimentoApósConclusãoDoTeste | verdadeiro | Para manter o diretório de implantação após uma execução de teste, defina esse valor como false. |
deployTestSourceDependencies | verdadeiro | Indica se as referências de origem de teste devem ser implantadas. |
ativado | verdadeiro | Se você definir o valor como false, os itens de implantação especificados no método de teste não serão copiados para o diretório de implantação. |
Exemplo:
{
"mstest": {
"deployment": {
"deleteDeploymentDirectoryAfterTestRunIsComplete": true,
"deployTestSourceDependencies": true,
"enabled": true
}
}
}
output
configurações
Todas as configurações nesta seção pertencem ao elemento output
.
Entrada | Predefinido | Descrição |
---|---|---|
captureTrace | verdadeiro | Capture mensagens de texto provenientes do Console.Write* , Trace.Write* e Debug.Write* APIs que serão associadas ao teste em execução atual. |
Exemplo:
{
"mstest": {
"output": {
"captureTrace": false
}
}
}
parallelism
configurações
Todas as configurações nesta seção pertencem ao elemento parallelism
.
Entrada | Predefinido | Descrição |
---|---|---|
ativado | falso | Habilite a paralelização de teste. |
Âmbito de aplicação | Classe | O âmbito da paralelização. Você pode defini-lo como method . O padrão, class , refere-se à execução sequencial de todos os testes de uma dada classe, enquanto várias classes são executadas em paralelo. |
trabalhadores | 0 | O número de threads/trabalhadores a serem usados para paralelização. O valor predefinido corresponde ao número de processadores na máquina atual. |
Exemplo:
{
"mstest": {
"parallelism": {
"enabled": true,
"scope": "method",
"workers": 32
}
}
}
execution
configurações
Todas as configurações nesta seção pertencem ao elemento execution
.
Entrada | Predefinido | Descrição |
---|---|---|
considerarFonteDeDadosVaziaComoInconclusiva | falso | Quando definido como true , uma fonte de dados vazia é considerada inconclusiva. |
considerarFixturesComoTestesEspeciais | falso | Para exibir AssemblyInitialize , AssemblyCleanup , ClassInitialize , ClassCleanup como entradas individuais no Visual Studio e no Visual Studio Code Test Explorer e no log de .trx, defina este valor como verdadeiro. |
mapearInconclusivoParaFalhado | falso | Se um teste for concluído com um status inconclusivo, ele será mapeado para o status ignorado no Gerenciador de Testes. Se você quiser que testes inconclusivos sejam mostrados como reprovados, defina o valor como true. |
mapearNaoExecutavelParaFalhado | verdadeiro | Um valor que indica se um resultado não executável é mapeado para um teste falhado. |
treatClassAndAssemblyCleanupAvisosAsErros | falso | Para ver suas falhas nas limpezas de classe como erros, defina esse valor como true. |
Tratar Avisos de Descoberta como Erros | falso | Para relatar avisos de descoberta de teste como erros, defina esse valor como true. |
Exemplo:
{
"mstest": {
"execution": {
"considerEmptyDataSourceAsInconclusive": false,
"considerFixturesAsSpecialTests": false,
"mapInconclusiveToFailed": true,
"mapNotRunnableToFailed": true,
"treatClassAndAssemblyCleanupWarningsAsErrors": false,
"treatDiscoveryWarningsAsErrors": false
}
}
}
timeout
configurações
Todas as configurações nesta seção pertencem ao elemento timeout
.
Entrada | Predefinido | Descrição |
---|---|---|
montagemLimpeza | 0 | Defina o tempo limite global a ser aplicado em cada instância do método de limpeza de assemblagem. |
inicializarMontagem | 0 | Especifique o tempo limite global a ser aplicado em cada instância do método de inicialização do assembly. |
classCleanup | 0 | Especifique globalmente o tempo limite para aplicar em cada instância do método de limpeza da classe. |
classInitialize | 0 | Especifique globalmente o tempo limite a ser aplicado em cada instância do método de inicialização de classe. |
teste | 0 | Especifique globalmente o tempo limite do teste. |
testCleanup | 0 | Especifique globalmente o tempo limite a ser aplicado em cada instância do método de limpeza de teste. |
testInitialize | 0 | Especifique globalmente o tempo limite a ser aplicado em cada instância do método de inicialização de teste. |
useCooperativaCancelamento | falso | Quando definido como true , em caso de tempo limite, o MSTest apenas acionará o cancelamento do CancellationToken mas não deixará de observar o método. Este comportamento é mais eficiente, mas depende do utilizador para passar corretamente o token por todos os caminhos. |
Observação
[Timeout]
atributo especificado num método substitui o timeout global. Por exemplo, [Timeout(1000)]
num método marcado com [AssemblyCleanup] irá substituir o timeout global de assemblyCleanup
.
Exemplo:
{
"mstest": {
"timeout": {
"assemblyCleanup": 0,
"assemblyInitialize": 0,
"classCleanup": 0,
"classInitialize": 0,
"test": 0,
"testCleanup": 0,
"testInitialize": 0,
"useCooperativeCancellation": false
}
}
}
Exemplo testconfig.json arquivo
O JSON a seguir mostra o conteúdo de um arquivo .testconfig.json típico. Copie este código e edite-o de acordo com as 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
}
}
}