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.
A classe
A classe TestContext fornece informações e ferramentas úteis para ajudar a gerenciar a execução do teste. Ela permite que você acesse detalhes sobre a execução do teste e ajuste o ambiente de teste. Essa classe faz parte do namespace Microsoft.VisualStudio.TestTools.UnitTesting.
Acessando o objeto TestContext
O objeto TestContext está disponível nos seguintes contextos:
- Como um parâmetro para AssemblyInitialize, os métodos ClassInitialize. Nesse contexto, as propriedades relacionadas à execução de teste não estão disponíveis.
- Começando com 3.6, opcionalmente, como um parâmetro para os métodos AssemblyCleanup e classCleanup. Nesse contexto, as propriedades relacionadas à execução de teste não estão disponíveis.
- Como uma propriedade de uma classe de teste. Nesse contexto, as propriedades relacionadas à execução de teste estão disponíveis.
- Como um parâmetro de construtor de uma classe de teste (começando com v3.6). Recomenda-se este método em vez de usar a propriedade, porque ele dá acesso ao objeto no construtor. Embora a propriedade esteja disponível somente após a execução do construtor. Dessa forma, também ajuda a garantir a imutabilidade do objeto e permite que o compilador imponha que o objeto não seja nulo.
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class MyTestClassTestContext
{
public TestContext TestContext { get; set; }
[AssemblyInitialize]
public static void AssemblyInitialize(TestContext context)
{
// Access TestContext properties and methods here. The properties related to the test run are not available.
}
[ClassInitialize]
public static void ClassInitialize(TestContext context)
{
// Access TestContext properties and methods here. The properties related to the test run are not available.
}
[TestMethod]
public void MyTestMethod()
{
// Access TestContext properties and methods here
}
}
Ou com MSTest 3.6+:
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class MyTestClassTestContextThroughCtor
{
private readonly TestContext _testContext;
public MyTestClassTestContextThroughCtor(TestContext testContext)
{
_testContext = testContext;
}
[AssemblyInitialize]
public static void AssemblyInitialize(TestContext context)
{
// Access TestContext properties and methods here. The properties related to the test run are not available.
}
[ClassInitialize]
public static void ClassInitialize(TestContext context)
{
// Access TestContext properties and methods here. The properties related to the test run are not available.
}
[TestMethod]
public void MyTestMethod()
{
// Access TestContext properties and methods here
}
}
Os TestContext membros
A classe TestContext fornece propriedades sobre a execução do teste juntamente com métodos para manipular o ambiente de teste. Esta seção aborda as propriedades e métodos mais usados.
Informações sobre a execução de teste
O TestContext fornece informações sobre a execução de teste, como:
- TestContext.TestName – o nome do teste em execução no momento.
- TestContext.CurrentTestOutcome - o resultado do teste atual.
- TestContext.FullyQualifiedTestClassName - o nome completo da classe de teste.
- TestContext.TestRunDirectory – o diretório em que a execução do teste é executada.
- TestContext.DeploymentDirectory - o diretório em que os itens de implantação estão localizados.
- TestContext.ResultsDirectory – o diretório em que os resultados do teste são armazenados. Normalmente, um subdiretório do TestContext.TestRunDirectory.
- TestContext.TestRunResultsDirectory – o diretório em que os resultados do teste são armazenados. Normalmente, um subdiretório do TestContext.ResultsDirectory.
- TestContext.TestResultsDirectory – o diretório em que os resultados do teste são armazenados. Normalmente, um subdiretório do TestContext.ResultsDirectory.
No MSTest 3.7 e posterior, a classe TestContext também fornece novas propriedades úteis para os métodos TestInitialize e TestCleanup:
-
TestContext.TestData - os dados que serão fornecidos ao método de teste parametrizado ou
nullse o teste não for parametrizado. - TestContext.TestDisplayName - o nome de exibição do método de teste.
-
TestContext.TestException - a exceção gerada pelo método de teste ou inicialização de teste, ou
nullse o método de teste não tiver gerado uma exceção.
Testes direcionados a dados
No MSTest 3.7 e posterior, a propriedade TestContext.TestData pode ser usada para acessar os dados do teste atual durante os métodos TestInitialize e TestCleanup.
Ao utilizar o .NET Framework como alvo, o
Considere o seguinte arquivo CSV TestData.csv:
Number,Name
1,TestValue1
2,TestValue2
3,TestValue3
Você pode usar o atributo DataSource para ler os dados do arquivo CSV:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
namespace YourNamespace
{
[TestClass]
public class CsvDataDrivenTest
{
public TestContext TestContext { get; set; }
[TestMethod]
[DataSource(
"Microsoft.VisualStudio.TestTools.DataSource.CSV",
"|DataDirectory|\\TestData.csv",
"TestData#csv",
DataAccessMethod.Sequential)]
public void TestWithCsvDataSource()
{
// Access data from the current row
int number = Convert.ToInt32(TestContext.DataRow["Number"]);
string name = TestContext.DataRow["Name"].ToString();
Console.WriteLine($"Number: {number}, Name: {name}");
// Example assertions or logic
Assert.IsTrue(number > 0);
Assert.IsFalse(string.IsNullOrEmpty(name));
}
}
}
Armazenar e recuperar dados de runtime
Você pode usar TestContext.Properties para armazenar pares de chave-valor personalizados que podem ser acessados por diferentes métodos na mesma sessão de teste.
TestContext.Properties["MyKey"] = "MyValue";
string value = TestContext.Properties["MyKey"]?.ToString();
Associar dados a um teste
O método TestContext.AddResultFile(String) permite adicionar um arquivo aos resultados do teste, disponibilizando-o para revisão na saída do teste. Isso pode ser útil se você gerar arquivos durante o teste (por exemplo, arquivos de log, capturas de tela ou arquivos de dados) que você deseja anexar aos resultados do teste.
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class TestClassResultFile
{
public TestContext TestContext { get; set; }
[TestMethod]
public void TestMethodWithResultFile()
{
// Simulate creating a log file for this test
string logFilePath = Path.Combine(TestContext.TestRunDirectory, "TestLog.txt");
File.WriteAllText(logFilePath, "This is a sample log entry for the test.");
// Add the log file to the test result
TestContext.AddResultFile(logFilePath);
// Perform some assertions (example only)
Assert.IsTrue(File.Exists(logFilePath), "The log file was not created.");
Assert.IsTrue(new FileInfo(logFilePath).Length > 0, "The log file is empty.");
}
}
Você também pode usar os métodos TestContext.Write ou TestContext.WriteLine para gravar mensagens personalizadas diretamente na saída do teste. Isso é especialmente útil para finalidades de depuração, pois fornece informações de log em tempo real no seu contexto de execução de teste.
Analisadores relacionados
Os seguintes analisadores ajudam a garantir o uso adequado da TestContext classe:
- MSTEST0005 – a propriedade TestContext deve ter um layout válido.
- MSTEST0024 - Não armazene TestContext em um membro estático.
- MSTEST0033 – suprime a propriedade CS8618 para TestContext.
- MSTEST0048 – Evite propriedades TestContext em métodos de instalação.
- MSTEST0049 – Flow TestContext CancellationToken.
- MSTEST0054 - Use a propriedade CancellationToken.