Compartir a través de


Cómo: Hacer que las pruebas dejen de ejecutarse tras un período de tiempo especificado

Puede establecer límites de tiempo para la ejecución de una prueba o una ejecución de prueba. Es posible que tenga que hacerlo, por ejemplo, si trabaja en un laboratorio de pruebas y necesita completar una ejecución de prueba antes de determinada hora del día.

Otro escenario para el uso de límites de tiempo es cuando se trabaja con código que no responde. Si una prueba encuentra una sección de código que no responde, el uso de un tiempo de espera para la prueba y un tiempo de espera para la ejecución de pruebas permite que finalice la prueba individual de modo que la ejecución de pruebas pueda continuar con las pruebas siguientes.

Hay dos maneras de establecer los límites de tiempo:

No se pueden establecer tiempos de espera para tipos de prueba específicos. Los tiempos de espera de pruebas no son aplicables a pruebas manuales, pero los tiempos de espera de ejecución de prueba siempre están en vigor, incluso para ejecuciones de prueba que contengan pruebas manuales.

El establecimiento de límites de tiempo para pruebas y para ejecuciones de prueba tiene estos efectos:

  • Cuando la duración de una ejecución de prueba alcanza el valor del tiempo de espera que le corresponde, se anula la ejecución de prueba, aun cuando algunas pruebas no se hayan ejecutado.

  • Cuando la duración de una prueba individual alcanza el valor de tiempo de espera que le corresponde, la ejecución de esa prueba se detiene y la prueba se marca como Tiempo de espera agotado. La ejecución de prueba continúa con la prueba siguiente.

Cómo afectan los métodos de inicialización al tiempo de espera de las pruebas

Una ejecución de pruebas puede incluir un método AssemblyInitializeAttribute y un método ClassInitializeAttribute. Si se definen estos métodos, tardarán una cantidad finita de tiempo en completarse y, a continuación, se iniciará la primera ejecución de pruebas.

La cantidad de tiempo que consumen los métodos de inicialización se suma a la cantidad de tiempo que tarda la primera prueba. Podemos expresarlo como una fórmula con los términos siguientes:

  • Dt = duración total

  • Dr = cantidad tiempo que tarda en ejecutarse una prueba

  • I = métodos de inicialización para el ensamblado y la clase

  • Tn = prueba que se ejecuta en una posición aleatoria de una ejecución de pruebas

  • T1 = prueba que se ejecuta en la primera posición de una ejecución de pruebas

Lo siguiente es aplicable a todas las pruebas siguientes a la primera:

Dt**[Tn] = Dr[Tn]**

Pero cabe destacar el caso siguiente:

Dt**[T1] = Dr[T1] + D[I]**

La primera prueba que se ejecuta puede tener asignado un valor de tiempo de espera para la prueba. En este caso, el tiempo de inicialización se descontará del límite de tiempo impuesto a la primera prueba, por lo que podría impedir que se ejecutase correctamente.

Nota

Esta limitación únicamente puede impedir la realización de la primera prueba.Las pruebas subsiguientes de la ejecución de pruebas no se ven afectadas.

Si la serie de pruebas incluye métodos de inicialización, puede evitar esta limitación de la manera siguiente: aplique a cada prueba un tiempo de espera mayor que la suma de los tiempos de ejecución esperados para el método de prueba y todos los métodos de inicialización. Deberá hacerlo para cada prueba. Dado las pruebas unitarias no garantizan el orden en que se ejecutan las pruebas, no se puede predecir qué prueba se ejecutará en primer lugar.

Cómo afectan los métodos de limpieza al tiempo de espera de la ejecución de pruebas

Una ejecución de pruebas puede incluir un método AssemblyCleanupAttribute y un método ClassCleanupAttribute. Después de completarse estos métodos, la ejecución de pruebas finaliza.

La ejecución de pruebas podría tener asignado un valor de tiempo de espera. La cantidad de tiempo consumido por los métodos de limpieza se suma a la cantidad total de tiempo que tarda la ejecución de pruebas. En otros términos, el tiempo de limpieza se descuenta del límite de tiempo impuesto a la ejecución de pruebas en su conjunto y, por consiguiente, podría hacer que se agote el tiempo de espera de la ejecución de pruebas.

Establecer el período de tiempo de espera para todas las pruebas

En este procedimiento se incluye la creación de archivo de configuración de pruebas. Si es posible, evite este procedimiento, ya que obliga a ejecutar las pruebas con un marco anterior que es menos eficiente.

  1. En la carpeta Elementos de la solución correspondiente a su solución, haga doble clic en el archivo de configuración de pruebas. Si no tiene un archivo *.testsettings, haga clic con el botón secundario en la solución y seleccione Agregar elemento, Configuración de pruebas.

    Se muestra el cuadro de diálogo Opciones de configuración.

  2. Elija Tiempos de espera de la prueba.

  3. Active Anular una ejecución de prueba si su tiempo de ejecución total supera:

  4. Establezca el valor de tiempo de espera de la ejecución de prueba en horas, minutos y segundos.

  5. Elija Guardar y, a continuación, Cerrar.

    Hace que este sea el archivo de configuración de pruebas activo. Seleccione Prueba > Configuración de pruebas > Establecer el archivo de configuración de pruebas.

Establecer el valor de tiempo de espera en pruebas individuales

  • Agregue el atributo de tiempo de espera a cada prueba. El parámetro está en milisegundos. Por ejemplo:

    [TestMethod(), Timeout(80)]
    public void MyTestMethod()
    {
    // test code
    }
    
    <TestMethod(), Timeout(80)> _
    Public Sub MyTestMethod()
    ' test code
    End Sub
    

    Para esta prueba solamente, el valor que establezca reemplaza el valor de tiempo de espera por prueba establecido en la configuración de pruebas. pero no afecta al valor de tiempo de espera para la ejecución de prueba.

Vea también

Tareas

Cómo: Seleccionar la configuración de pruebas activa desde Microsoft Visual Studio