Compartir vía


La clase TestContext

La clase TestContext proporciona información útil y herramientas para ayudar a administrar la ejecución de pruebas. Permite acceder a los detalles sobre la ejecución de pruebas y ajustar el entorno de prueba. Esta clase forma parte del espacio de nombres Microsoft.VisualStudio.TestTools.UnitTesting.

Acceso al objeto TestContext

El objeto TestContext está disponible en los contextos siguientes:

  • Como parámetro para los métodos [AssemblyInitialize] y [ClassInitialize]. En este contexto, las propiedades relacionadas con la ejecución de pruebas no están disponibles.
  • Como propiedad de una clase de prueba. En este contexto, están disponibles las propiedades relacionadas con la ejecución de pruebas.
  • Como parámetro de constructor de una clase de prueba (a partir de 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. De este modo, también ayuda a garantizar la inmutabilidad del objeto y permite al compilador exigir que el objeto no sea NULL.
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
    }
}

Miembros de TestContext

La clase TestContext proporciona propiedades sobre la ejecución de pruebas junto con métodos para manipular el entorno de prueba. En esta sección se tratan las propiedades y métodos más usados.

Información de ejecución de pruebas

El TestContext proporciona información sobre la ejecución de pruebas, como:

  • TestName: el nombre de la prueba que se está ejecutando actualmente.
  • CurrentTestOutcome: el resultado de la prueba actual.
  • FullyQualifiedTestClassName: el nombre completo de la clase de prueba.
  • TestRunDirectory: el directorio donde se ejecuta la ejecución de la prueba.
  • DeploymentDirectory: el directorio donde se encuentran los elementos de implementación.
  • ResultsDirectory: el directorio donde se almacenan los resultados de la prueba. Normalmente, un subdirectorio del TestRunDirectory.
  • TestRunResultsDirectory: el directorio donde se almacenan los resultados de la prueba. Normalmente, un subdirectorio del ResultsDirectory.
  • TestResultsDirectory: el directorio donde se almacenan los resultados de la prueba. Normalmente, un subdirectorio del ResultsDirectory.

En MSTest 3.7 y versiones 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 versiones posteriores, la propiedad TestData se puede usar para acceder a los datos de la prueba actual durante los métodos TestInitialize y TestCleanup.

Al establecer como destino .NET Framework, el TestContext permite recuperar y establecer datos para cada iteración en una prueba controlada por datos, mediante propiedades como DataRow y DataConnection (para pruebas basadas en DataSource).

Tenga en cuenta el siguiente archivo CSV TestData.csv:

Number,Name
1,TestValue1
2,TestValue2
3,TestValue3

Puede usar 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));
        }
    }
}

Almacenamiento y recuperación de datos en tiempo de ejecución

Puede usar TestContext.Properties para almacenar pares clave-valor personalizados a los que se puede tener acceso en distintos métodos de 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) permite agregar un archivo a los resultados de la prueba, lo que hace que esté 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 usar métodos TestContext.Write o TestContext.WriteLine para escribir mensajes personalizados directamente en la salida de 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 pruebas.