Páginas

26/2/15

JUnit Suite

JUnit Suite.

Pruebas unitarias con JUnit Suite.




Pruebas parametrizadas en JUnit. JUnitParams. Es muy común utilizar JUnit en proyectos grandes de Java ya que casi siempre trabajan varias personas en el mismo proyecto y es una buena práctica hacerle una prueba unitaria a los métodos que son un poco complejos para verificar que a medida que pasa el tiempo y los mismos son modificados en requerimientos futuros los métodos siguen estando completamente operativos. Lo que pasa es que las cosas se tienen que hacer entendibles y ordenadas, y para hacerlo de esa manera sería bueno hacer una clase de pruebas unitaria por cada clase que contenga métodos que queramos testear, si estas en un proyecto grande la cantidad de clases de pruebas unitarias sería muy grande. Para no correr una clase de prueba unitaria a la vez JUnit implemento una clase llamada JUnit Suite en la cual podemos correr todas las clases de pruebas unitarias de una sola vez y no una por una.

Para implementar esta clase tenemos que utilizar la anotación del runner @RunWith(Suite.class) y @SuiteClasses({ DatoJava1.class, DatoJava2.class, DatoJava3.class.... }) en donde declaramos las clases de pruebas unitarias que se van a ejecutar en este suite. Ubicamos esas anotaciones antes del nombre de la clase y con eso basta, no es necesario implementar algún método dentro de la clase o cualquier otra cosa. Un ejemplo de JUnit Suite sería así:

20/2/15

JUnit pruebas unitarias parametrizadas. Test con parámetros en JUnit. JUnitParams.

JUnit pruebas unitarias parametrizadas. Test con parámetros en JUnit. JUnitParams.

Test con parámetros en JUnit.




Pruebas parametrizadas en JUnit. JUnitParams. Haciendo pruebas unitarias siempre queremos que las mismas sean lo más fuertes posibles, con los tutoriales de JUnit assertions, assumptions y Hamcrest se pueden hacer, pero falta algo, hacer las pruebas con distintos parámetros y probar ese test con varios casos para asegurarnos de que en realidad el test funciona de manera correcta, para hacer pruebas unitarias parametrizadas en JUnit hay varias maneras, yo en este tutorial voy a poner los más usados y el que recomiendo.

Una prueba unitaria parametrizada no es más que un método de prueba en el cual deben realizarse como si de un bucle for se tratara una prueba por cada grupo de parámetros, esto hace la prueba unitaria mucho mas fuerte ya que así verificamos que en todos los casos posibles pase la prueba. Por ejemplo si no sabemos bien como hacer pruebas parametrizadas podemos utilizar nuestra lógica sencilla y hacer una prueba unitaria parecida a esta, lo cual no está mal pero hay una mejor manera:

12/2/15

java.lang.numberformatexception: For input string:

java.lang.NumberFormatException: For input string: "0,0".

java.lang.NumberFormatException



java.lang.NumberFormatException es una excepción en Java que a veces nos hace perder mucho tiempo cuando en realidad es una tontería, en este dato java te digo como solucionarlo.

Pongo de ejemplo este caso, estamos en un proyecto y resulta que todo funciona bien pero al tiempo cuando le haces una prueba comienza a fallar lanzando esta excepción en particular "java.lang.NumberFormatException: For input string: '0,0'", ahí es cuando te preguntas si es algún tipo de brujería o que es lo que está pasando, ya que ese código paso todas las etapas de prueba y en producción funciona de maravilla pero en tu maquina localhost no funciona... Que caga... Bueno te cuento que ahí interviene la configuración regional de tu equipo, en mi caso lo que paso fue eso, parece que en algún momento de mi vida cambie la configuración regional de mi equipo y Java a la hora de compilar esta tomando tu configuración regional y puede que algunas cosas no funcionen como deberían, para solucionarlo no cambie la configuración regional de mi equipo sino que utilice otro método el cual me asegura que funcionara con cualquier configuración regional.

En el código hacía unas operaciones con tipos de datos Double, por lo tanto para formatear el valor utilizo un DecimalFormat y ahí lanzaba la excepción, el código es así:
   Double valor = 0.0;
   DecimalFormat decimalFormat = new DecimalFormat("0.0");

   valor = Double.valueOf(decimalFormat.format((88778.65 / 13456.0)));
  
Justamente en la línea 4 se produce el error, para solucionar ese problemita independientemente de tu configuración regional, utilice la clase java.text.DecimalFormatSymbols de esta manera.
   DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
   decimalFormatSymbols.setDecimalSeparator('.');
   
   Double valor = 0.0;
   DecimalFormat decimalFormat = new DecimalFormat("0.0", decimalFormatSymbols);

   valor = Double.valueOf(decimalFormat.format((88778.65 / 13456.0)));
  
Lo que hago es cambiarle el separador decimal que utiliza DecimalFormat basado en mi configuración regional. Depurando el ejemplo te muestro una lista de las propiedades de la clase DecimalFormatSymbols. Está utilizando la configuración regional de Perú.
DecimalFormatSymbols
DecimalFormatSymbols
Como vemos el separador de decimales en este caso es una "," y por eso lanza la excepción, espero hallas encontrado esta solución rápidamente y sigas programando tu aplicación relajado :)...



2/2/15

Tutorial JUnit Matchers. Tutorial JUnit Hamcrest.

Tutorial JUnit Matchers. Tutorial JUnit Hamcrest.

JUnit Matchers. Hamcrest lib.




JUnit Matchers Hamcrest Tutorial. Hamcrest es una librería basada en Matchers para poder hacer nuestras pruebas unitarias en JUnit mucho mas fuertes, esta librería incluso nos permite hacer pruebas equivalentes a cualquier método assert o assume, el lenguaje en el cual hacemos las pruebas unitarias es mas legible y los mensajes de error son mas descriptivos.

En este tutorial te voy hablar acerca de los org.hamcrest.CoreMatchers que son los más usados de esta librería para nuestras pruebas unitarias en JUnit, primero lo que tenemos que hacer es tener un poco de conocimiento acerca de:
Por lo menos para comprender un poco mas esta librería. Ahora si, mira este tutorial y aprende mas!