Cómo fallar una prueba después de un tiempo de espera se excede en JUnit 5?

Un vaso de barro:

En JUnit 4 el parámetro anotación "tiempo de espera" se puede utilizar para forzar una prueba para detenerse después de la cantidad de tiempo dado:

@Test(timeout=100)
public void infinity() {
   while(true);
}

¿Cómo se puede hacer esto en JUnit 5?

En estrecha relación con (y el código tomado de) el parámetro de tiempo de espera para la anotación de Prueba Tipo , pero para JUnit 5.

davidxxx:

La estricta equivalente del timeoutatributo es el declarativa @Timeoutanotación.
De la documentación JUnit 5 :

La @Timeoutanotación le permite a uno para declarar que una prueba, prueba de fábrica, plantilla de prueba, o método del ciclo de vida debería fallar si su tiempo de ejecución es superior a una duración determinada. La unidad de tiempo de los valores predeterminados de duración a segundos, pero se puede configurar.

Por ejemplo :

@Test
@Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
void infinity() { 
  // fails if execution time exceeds 100 milliseconds
  //...
}

Assertions.assertTimeout()y Assertions.assertTimeoutPreemptively()son los nuevos conceptos introducidos en JUnit 5 (no existentes en JUnit 4). Estas son las alternativas a @Timeoutque reducen el tiempo de espera a un conjunto específico de los estados: éstos definidos en el Executableo en el Supplierpasado como parámetro.
Estos dos métodos (con un nombre muy cerca) abordan el mismo objetivo general, pero con una diferencia sutil.
assertTimeoutPreemptively()preventivamente aborta la Executable/Suppliersi el tiempo de espera se produce mientras que assertTimeout()no lo hace.
Para lograrlo, assertTimeoutPreemptively()se ejecuta el proporcionado Executable/Supplieren un hilo diferente que la del código de llamada, mientras que assertTimeout()la ejecuta en el mismo hilo.

Advertencia de la documentación oficial: Código / bibliotecas que dependen de la java.lang.ThreadLocalde almacenamiento para la configuración de ejecución de la prueba / desmontaje pueden tener efectos secundarios indeseables con assertTimeoutPreemptively()ya que ejecuta las instrucciones proporcionadas en un hilo diferente.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=231453&siteId=1
Recomendado
Clasificación