Compartir a través de


Ciclo de vida de MSTest

MSTest proporciona un ciclo de vida bien definido para las clases de prueba y los métodos de prueba, lo que permite realizar operaciones de configuración y desmontaje en varias fases del proceso de ejecución de pruebas. El ciclo de vida se puede agrupar en las tres fases siguientes:

  • Ciclo de vida a nivel de ensamblaje
  • Ciclo de vida a nivel de clase
  • Ciclo de vida de nivel de prueba

La ejecución de los eventos de ciclo de vida se produce desde el nivel más alto (ensamblado) hasta el nivel más bajo (método de prueba). El orden de ejecución es el siguiente:

  1. Inicialización del ensamblado
  2. Inicialización de clases (para cada clase de prueba)
  3. Inicialización de pruebas (para cada método de prueba)
  4. Ejecución de pruebas
  5. Limpieza de pruebas (para cada método de prueba)
  6. Limpieza de clases (para cada clase de prueba)
  7. Limpieza de ensamblados

Ciclo de vida de nivel de ensamblado

El ciclo de vida del ensamblado describe el ciclo de vida de todo el ensamblado, que incluye todas las clases y métodos de prueba. Para administrar el ciclo de vida del ensamblado, MSTest proporciona los atributos AssemblyInitialize y AssemblyCleanup . Para obtener más información sobre estos atributos, consulte la documentación assemblyInitialize y AssemblyCleanup .

Ciclo de vida a nivel de clase

El ciclo de vida de la clase de prueba hace referencia al ciclo de vida de las clases de prueba individuales dentro del ensamblado y se puede implementar mediante los atributos ClassInitialize y ClassCleanup . Estos atributos permiten definir métodos de instalación y desmontaje que se ejecutan antes y después de todas las pruebas de una clase, respectivamente. Para obtener más información sobre estos atributos, consulte la documentación classInitialize y ClassCleanup . El ciclo de vida del nivel de clase solo se ejecuta una vez por clase, independientemente del número de pruebas de una clase.

Ciclo de vida de nivel de prueba

El ciclo de vida del nivel de prueba se ejecuta para cada método de prueba. Para las pruebas con parámetros, cada conjunto de parámetros se trata como un método de prueba independiente y el ciclo de vida se ejecuta para cada conjunto de parámetros. El ciclo de vida de la prueba por nivel se agrupa en configuración, ejecución y limpieza; con configuración y limpieza admitiendo varias maneras de implementación.

Configuración

La fase de configuración del ciclo de vida de nivel de prueba es responsable de preparar el entorno de prueba antes de la ejecución de cada método de prueba. Esto se puede lograr mediante el TestInitialize atributo o implementando un constructor en la clase de prueba. En el caso de herencia, la ejecución de TestInitialize métodos sigue el orden de la clase base a la clase derivada. Si una clase de prueba implementa un constructor, se ejecuta antes del TestInitialize método . Para más información sobre el TestInitialize atributo, consulte la documentación del atributo de nivel de prueba .

Nota:

A diferencia del constructor de clases, TestInitialize los métodos pueden ser asincrónicos y también admiten el uso de atributos como TimeoutAttribute.

Ejecución

La fase de ejecución es la fase en la que se ejecuta el método de prueba real. Si un método de prueba devuelve un Task o ValueTask, el método de prueba será esperado.

Advertencia

En el caso de los métodos de prueba asincrónicos, no se proporciona SynchronizationContext . Esto no se aplica a UITestMethod las pruebas para UWP y WinUI, ya que se ejecutan en el subproceso de interfaz de usuario que tiene un SynchronizationContext.

Limpieza

La fase de limpieza del ciclo de vida del nivel de prueba es responsable de limpiar el entorno de prueba después de la ejecución de cada método de prueba. Esto se puede lograr mediante el TestCleanup atributo o implementando la IDisposable/IAsyncDisposable interfaz en la clase de prueba. Si una clase de prueba implementa IDisposable o IAsyncDisposable, su Dispose/DisposeAsync método se ejecuta después del TestCleanup método . En caso de herencia, la ejecución de TestCleanup métodos sigue el orden de la clase derivada a la clase base. Para más información sobre el TestInitialize atributo, consulte la documentación del atributo de nivel de prueba .

Pedido

El orden completo del ciclo de vida del nivel de prueba es el siguiente:

  1. Creación de una instancia de la clase de prueba
  2. Establecer la propiedad TestContext si está presente
  3. Ejecutar TestInitialize (si se implementa)
  4. Ejecución del método de prueba
  5. Actualiza TestContext con los resultados de prueba (como la propiedad Outcome)
  6. Ejecutar TestCleanup si está implementado
  7. Ejecución de DisposeAsync si se implementa
  8. Ejecute Dispose si está implementado