Compartir a través de


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:

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.