Quizas ver primero:
# Tests con Parametros en Java usando JUnit 5
Ahora que ya sabemos como escribir tests y conocemos el Ciclo de vida de un Test en Java usando JUnit 5, podemos pasar a escribir tests mas complejos y que incluyan mas funcionalidad.
Para iniciar a utilizar tests con parametros debemos importar a nuestro gestor de dependencias la libreria auxiliar para JUnit 5.
Gradle:
| |
Maven:
| |
# Inicializacion
Para entender este tema, veamos un ejemplo con nuestra clase Calculator, la cual tiene el metodo maxOf para determinar el maximo de dos numeros.
| |
Ahora veamos como hariamos la clase para probarlo hasta ahora.
| |
Ahora si, pasamos a ver las nuevas adiciones de nuestra nueva libreria.
# @ParameterizedTest
Esta anotacion nos permite indicarle a nuestro metodo que se trata de un test con parametros, por tanto, recibira los datos para su ejecucion del data source indicado. Veamos como re-escribiriamos el test anterior de forma mas simple.
| |
Utilizamos la anotacion @ParameterizedTest en lugar del simple @Test. Ademas, le estamos indicando con la anotacion @CsvSource que los datos para este test seran obtenidos de los siguientes datos anotados en forma de CSV.
Adicionalmente, tambien podemos agregarle el parametro name a nuestra anotacion @ParameterizedTest para agregarle nuestro propio mensaje al momento de finalizar su ejecucion:
| |
# Sources para los Argumentos
Como indicamos, podemos utilizar o incluso combinar distintos data sources para los argumentos de nuestros Tests. Podemos consultar todos los disponibles en la Documentacion oficial.
# @ValueSource, @EmptySource, @NullSource y @NullAndEmptySource
- @ValueSource data source que permite enviar distintos valores primitivos a nuestros tests. Acepta desde bytes hasta longs, pasando por booleans, ints, shorts, Strings, etc.
- @EmptySource nos permite enviar un data source que no contenga nada, puede ser una lista, un array o un String.
- @NullSource nos permite enviar un data source que sea null.
- @NullAndEmptySource nos permite enviar un data source que no contenga nada y que sea null.
Veamos algunos de sus usos, supongamos que en nuestra calculadora agregamos el metodo isEven(int n) para determinar si un numero es par o no.
| |
Pueden ser combinadas incluso para determinar todos los rangos de un test, desde null y empty hasta valores.
# @MethodSource
Nos permite indicar un metodo (Interno de la clase tests o externo de otra clase) la cual devuelve un parametro que nos sirve como datasource para nuestro test. Como parametro se le pasa el nombre del metodo el cual devuelve el source que nosotros esperamos recibir para probar. Cabe aclarar que estos metodos deben estar marcados con static.
| |
En caso de tener multiples parametros en el test, se debe contar devolver obligatoriamente un array, un stream, una coleccion de objetos que contengan esos parametros para que nuestro test pueda trabajar con ellos.
# @CsvSource y @CsvFileSource
Estas anotaciones nos permiten trabajar con datos que cuenten con formato CSV.
- @CsvSource nos permite mandar datos como parametros de la misma anotacion, siguiendo el formato CSV. Es como el primer ejemplo que vimos en esta nota.
| |
- @CsvFileSource nos permite mandar datos desde un archivo CSV externo a nuestro Test, para realizarlo necesitamos el parametro “resources =’ ’ “.
| |
Siguiente: