An Interest In:
Web News this Week
- April 2, 2024
- April 1, 2024
- March 31, 2024
- March 30, 2024
- March 29, 2024
- March 28, 2024
- March 27, 2024
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 Iteraciones | Test A (@RepeatedTest) | Test B (do-while) |
---|---|---|
1_000 | 130 ms | 13 ms |
100_000 | 2600 ms | 20 ms |
1_000_000 | Indeterminado | 55 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
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To