La clase TestContext
.
La clase TestContext ofrece información y herramientas útiles para ayudar a administrar la ejecución de la prueba. Le permite acceder a detalles sobre la ejecución de la prueba y ajustar el entorno de prueba. Esta clase es parte del espacio de nombres Microsoft.VisualStudio.TestTools.UnitTesting.
Acceso al objeto TestContext
El objeto TestContext está disponible en los siguientes contextos:
- Como parámetro de los métodos AssemblyInitialize, ClassInitialize. En este contexto, las propiedades relacionadas con la ejecución de la prueba no están disponibles.
- A partir de la 3.6, opcionalmente, como parámetro de AssemblyCleanup, los métodos ClassCleanup. En este contexto, las propiedades relacionadas con la ejecución de la prueba no están disponibles.
- Como propiedad de una clase de prueba. En este contexto, las propiedades relacionadas con la ejecución de la prueba están disponibles.
- Como parámetro compilador de una clase de prueba (a partir de la v3.6). Esta forma se recomienda sobre el uso de la propiedad, ya que da acceso al objeto en el constructor. Mientras que la propiedad solo está disponible después de que el constructor se ha ejecutado. Esta forma también ayuda a asegurar la inmutabilidad del objeto y permite al compilador hacer cumplir que el objeto no es 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
}
}
O con 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
}
}
Los miembros TestContext
La clase TestContext proporciona propiedades sobre la ejecución de la prueba junto con métodos para manipular el entorno de prueba. Esta sección cubre las propiedades y métodos más utilizados.
Información de serie de pruebas
El TestContext proporciona información sobre la ejecución de la prueba, tales como:
- TestContext.TestName – el nombre de la prueba que se está ejecutando actualmente.
- TestContext.CurrentTestOutcome - el resultado de la prueba actual.
- TestContext.FullyQualifiedTestClassName: el nombre completo de la clase de prueba.
- TestContext.TestRunDirectory: el directorio donde se ejecuta la ejecución de la prueba.
- TestContext.DeploymentDirectory: el directorio donde se encuentran los elementos de implementación.
- TestContext.ResultsDirectory: el directorio donde se almacenan los resultados de la prueba. Normalmente, un subdirectorio del TestContext.TestRunDirectory.
- TestContext.TestRunResultsDirectory: el directorio donde se almacenan los resultados de la prueba. Normalmente, un subdirectorio del TestContext.ResultsDirectory.
- TestContext.TestResultsDirectory: el directorio donde se almacenan los resultados de la prueba. Normalmente, un subdirectorio del TestContext.ResultsDirectory.
En MSTest 3.7 y posteriores, la clase TestContext también proporciona nuevas propiedades útiles para los métodos TestInitialize
y TestCleanup
:
- TestContext.TestData: los datos que se proporcionarán al método de prueba parametrizado o
null
si la prueba no está parametrizada. - TestContext.TestDisplayName: el nombre visible del método de prueba.
- TestContext.TestException: la excepción producida por el método de prueba o la inicialización de la prueba, o
null
si el método de prueba no produjo una excepción.
Pruebas controladas por datos
En MSTest 3.7 y posteriores, la propiedad TestContext.TestData puede utilizarse para acceder a los datos de la prueba actual durante los métodos TestInitialize
y TestCleanup
.
Cuando se utiliza .NET Framework, la propiedad TestContext permite recuperar y establecer datos para cada iteración en una prueba basada en datos, utilizando propiedades como DataRow
y DataConnection
(para pruebas basadas en DataSource).
Considere el siguiente archivo CSV TestData.csv
:
Number,Name
1,TestValue1
2,TestValue2
3,TestValue3
Puede utilizar el atributo DataSource
para leer los datos del archivo 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));
}
}
}
Almacenar y recuperar datos en tiempo de ejecución
Puede utilizar TestContext.Properties para almacenar pares clave-valor personalizados a los que se puede acceder a través de diferentes métodos en la misma sesión de prueba.
TestContext.Properties["MyKey"] = "MyValue";
string value = TestContext.Properties["MyKey"]?.ToString();
Asociar datos a una prueba
El método TestContext.AddResultFile(String) le permite añadir un archivo a los resultados de la prueba, haciéndolo disponible para su revisión en la salida de la prueba. Esto puede ser útil si genera archivos durante la prueba (por ejemplo, archivos de registro, capturas de pantalla o archivos de datos) que desea adjuntar a los resultados de la prueba.
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.");
}
}
También puede utilizar los métodos TestContext.Write o TestContext.WriteLine para escribir mensajes personalizados directamente en la salida de la prueba. Esto es especialmente útil para fines de depuración, ya que proporciona información de registro en tiempo real dentro del contexto de ejecución de la prueba.