Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
La clase
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. Para rellenar este directorio, use
DeploymentItemAttribute. - 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.
- A partir de MSTest 3.9, TestContext.TestRunCount, el número de veces que se ha ejecutado la prueba actual, empezando por 1. El valor es mayor que 1 cuando se reintenta una prueba con
[Retry].
Directorio temporal por prueba
Importante
TestContext.TestTempDirectory está planeado para MSTest 4.4 y solo está disponible en compilaciones en versión preliminar hasta que se publique MSTest 4.4.0.
Use TestContext.TestTempDirectory como espacio temporal privado para una prueba. MSTest crea el directorio solo cuando se accede por primera vez a la propiedad y cada ejecución de prueba recibe un directorio único. Cada fila de datos también recibe su propio directorio, por lo que las pruebas paralelas no comparten rutas de acceso.
string path = Path.Combine(TestContext.TestTempDirectory!, "output.json");
File.WriteAllText(path, json);
MSTest crea el directorio en TestResultsDirectory cuando sea posible y vuelve al directorio temporal del sistema cuando la ruta de acceso de resultados no está disponible, demasiado larga o de solo lectura. MSTest elimina el directorio después de una prueba superda y lo conserva después de cualquier resultado que no pase. Establezca la variable de MSTEST_TEST_TEMP_DIRECTORY_RETAIN entorno en 1 o true para conservar los directorios de todos los resultados.
Cuando una prueba superándose registra un archivo del directorio con AddResultFile, MSTest conserva el directorio hasta que el host recopila los datos adjuntos. La limpieza es el mejor esfuerzo y no cambia el resultado de la prueba.
TestTempDirectoryestá disponible para los destinos de .NET y .NET Framework, pero no para los destinos de UWP o WinUI. La propiedad no cambia el directorio actual del proceso.
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
nullsi 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
nullsi 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();
Nota
A partir de MSTest 4.2, las categorías de prueba de [TestCategory] se incluyen en TestContext.Properties.
A partir de MSTest 4.3, las propiedades personalizadas agregadas en TestContext.Properties se aplican a todas las clases y pruebas del ensamblado, y las propiedades agregadas en [AssemblyInitialize] se aplican a todas las pruebas de esa clase. Esto permite que los fixtures publiquen un contexto compartido que los métodos de prueba pueden leer.
A partir de MSTest 4.3.3, [TestProperty] los valores, las categorías de prueba, las propiedades proporcionadas por host y las propiedades que una prueba agrega permanecen en el ámbito de esa prueba y no fluyen a las pruebas del mismo nivel.
Acceder a TestContext desde la pila de llamadas actual
A partir de MSTest 4.2, TestContext.Current devuelve el TestContext de la prueba actual desde cualquier punto de la pila de llamadas durante la ejecución del método de prueba. Esta API es experimental, usa el [Experimental] atributo y podría cambiar en una versión futura de MSTest.
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. A partir de MSTest 4.4, el Live modo de captura de salida devuelve estos mensajes mientras se ejecuta la prueba y los sigue adjuntando al resultado final de la prueba. Para obtener más información, consulte Configuración de la salida de MSTest.
Token de cancelación
TestContext expone una propiedad CancellationToken que se señala cuando se agota el tiempo de espera de la prueba o se anula la ejecución de la prueba. Debe pasar este token a operaciones asincrónicas para que puedan responder de manera cooperativa a la cancelación. Esto es especialmente importante cuando se usan atributos timeout .
Cuando se accede a TestContext como una propiedad:
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class TestClassCancellationToken
{
// MSTest automatically sets the TestContext property before each test runs.
// MSTest.Analyzers includes a diagnostic suppressor that removes CS8618
// (non-nullable property uninitialized) for this property.
public TestContext TestContext { get; set; }
[TestMethod]
[Timeout(5000, CooperativeCancellation = true)]
public async Task MyAsyncTest()
{
using var client = new HttpClient();
var response = await client.GetAsync(
"https://example.com", TestContext.CancellationToken);
Assert.IsTrue(response.IsSuccessStatusCode);
}
}
Cuando TestContext se inserta a través del constructor (MSTest 3.6+):
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class TestClassCancellationTokenCtor
{
private readonly TestContext _testContext;
public TestClassCancellationTokenCtor(TestContext testContext)
{
_testContext = testContext;
}
[TestMethod]
[Timeout(5000, CooperativeCancellation = true)]
public async Task MyAsyncTest()
{
using var client = new HttpClient();
var response = await client.GetAsync(
"https://example.com", _testContext.CancellationToken);
Assert.IsTrue(response.IsSuccessStatusCode);
}
}
Sugerencia
La regla del analizador de MSTest MSTEST0049 ayuda a identificar las llamadas asincrónicas en las que TestContext.CancellationToken se debe pasar. También proporciona un solucionador de código para aplicar el cambio automáticamente.
Analizadores relacionados
Los analizadores siguientes ayudan a garantizar el uso adecuado de la TestContext clase :
- MSTEST0005: la propiedad TestContext debe tener un diseño válido.
- MSTEST0024 : no almacene TestContext en un miembro estático.
- MSTEST0033 : suprime la propiedad CS8618 para TestContext.
- MSTEST0048 - evite las propiedades TestContext en métodos de configuración.
- MSTEST0049 - Flow TestContext CancellationToken.
- MSTEST0054 : use la propiedad CancellationToken.