Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
November 10, 2022 08:00 am GMT

JUnit: Cmo ejecutar un test N iteraciones

En ciertas ocasiones puede que necesitemos ejecutar un test N veces para poder asegurar su correcto funcionamiento.

Para ello, contamos con varias frmulas. En primer lugar, vamos a considerar el siguiente escenario:

  • Queremos testear un mtodo que nos genera un nmero aleatorio de N dgitos. El valora de N se pasa como parmetro a dicho mtodo.
  • Creamos una clase de test de jUnit en la que declaramos el nmero de repeticiones o iteraciones que queremos ejecutar un determinado test.
private static final int NUMBER_REPETITIONS = 1_000_000;
  • Creamos los tests para validar la funcionalidad del mtodo. En este ejemplo, he creado un test mediante la anotacin de jUnit @RepeatedTest y otro test simple en el que realizamos toda la lgica dentro de un bucle do-while.

Test A: utilizando la anotacin @RepeatedTest.

import org.junit.jupiter.api.RepeatedTest;@RepeatedTest(value = NUMBER_REPETITIONS)void random_number_with_four_digits() {    var low = 1000;    var high = 9999;    var numOfDigits = 4;    var actual = RandomUtil.generateNumber(numOfDigits);    assertTrue(high >= actual, "Error, random is too high");    assertTrue(low <= actual, "Error, actual is too low");}

Test B: utilizando el bucle do-while.

@Testvoid random_numbers_generator() {    int iterationCount = 1;    do {        var low = 1000;        var high = 9999;        var numOfDigits = 4;        var actual = RandomUtil.generateNumber(numOfDigits);        assertTrue(high >= actual, "Error, random is too high");        assertTrue(low <= actual, "Error, actual is too low");        iterationCount++;    } while (iterationCount <= NUMBER_REPETITIONS);}

Como podemos ver ambos tests afirman lo mismo, que el mtodo generador de nmeros aleatorios va a devolver un valor que se encuentra entre low y high.
En ambos casos el test se va a ejecutar tantas veces como indiquemos en la constante NUMBER_REPETITIONS.

Una vez contamos con este escenario, podemos realizar distintas pruebas alterando el valor de low, high, numOfDigits y NUMBER_REPETITIONS.

En esta ocasin quera calcular la diferencia de los tiempos de ejecucin de cada tipos de test, y estas son las pruebas que he realizado:

N IteracionesTest A (@RepeatedTest)Test B (do-while)
1_000130 ms13 ms
100_0002600 ms20 ms
1_000_000Indeterminado55 ms

En este ejemplo, los tests ejecutados mediante el bucle do-while han sido aproximadamente un 90% ms rpidos que los ejecutados mediante la anotacin @RepeatedTest, adems de que para el caso de 1_000_000 iteraciones, no he podido obtener un resultado final ya que la aplicacin se quedaba colgada.


Original Link: https://dev.to/gekyzo/como-repetir-un-test-n-iteraciones-36pd

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To