JUnit - Pruebas Unitarias con CMD - Java

JUnit es parte de la familia xUnit, los cuales son frameworks desarrollados por terceras partes; existen muchos tipos de frameworks para pruebas unitarias, tales como:

  • CUnit - para C
  • CppUnit - para C++
  • NUnit - para .NET
  • COBOLUnit - para COBOL

JUnit fue desarrollado por  Erich Gamma y Kent Beck. No abundare en mucha teoria acerda de JUnit o pruebas Unitarias, solo diré que las pruebas Unitarias son aquellas realizadas por los desarrolladores para garantizar la robustez del programa que crean.

JUnit por su parte maneja el principio TDD, Test Driven Development por sus siglas en ingles; Lo cual significa que JUnit se maneja bajo el principio: Prueba un poco, desarrolla un poco.

Para utilizar JUnit, se necesitan de 3 partes:

Clase PrincipalClase de Caso
de Prueba
Clase de Ejecucion
de Caso de Prueba
Esta clase es nuestro programa como tal, el código que queremos poner a prueba y verificar su robustezEsta clase contendrá todos los casos de prueba que se ejecutaran. Mas adelante explicare mas a detalle los casos de prueba en JUnitEsta clase es la cual se encarga de ejecutar los casos de prueba, nunca se ejecuta un caso de prueba sin si clase de ejecución (al menos usando CMD, en otro post mostrare su uso con eclipse o NetBeans)

Para explicar con mas detalle cada clase, explicare con un ejemplo simple, pero practico, pero antes de empezar deben de haber descargado JUnit, pueden descargarlo haciendo click aquí (este link nos descargara un archivo .jar). Una vez descargado JUnit, coloquenlo en una ruta segura de su computadora y ahora si a empezar con la explicacion:

Primero tenemos que abrir nuestro CMD.Ahora tenemos que asignar nuestras variables de sistema, para esto tenemos que teclear las siguientes lineas en nuestro CMD:

set PATH=C:\Program Files\Java\jdk1.7.0_45\bin;%PATH%;
SET JUNIT_HOME=D:\JUnit\junit-4.10.jar

SET CLASSPATH=%JUNIT_HOME%;%CLASSPATH%

La primer linea es para configurar la ruta de nuestro JDK. La segunda para crear una variable llamada JUNIT_HOME, esta variable no es propia del sistema ni de Java, es una variable que hemos decidido crear apuntando a la carpeta donde guardamos el archivo .jar del JUnit, en su caso deben de copiar y pegar la ruta donde se encuentra guardado su archivo.jar. La tercer linea es para añadir la ruta de nuestro JUnit a la variable CLASSPATH la cual es propia de Java (rápido, esta variable es muy útil ya que cuando compilamos algo en Java y el archivo no se encuentra en nuestra ubicación actual, inmediatamente Java va a buscar en todas las rutas que tenga guardadas en la variable CLASSPATH, es decir, es solo un "comodín" donde guardamos rutas de archivos que queremos incluir durante nuestra compilacion de nuestras clases).

Es muy importante que configuren estas variables para que nuestras clases funcionen y como nota rápida, no deben de cerrar su CMD, ya que de hacerlo tendrán que volver a asignar estas variables.

Ahora si empezemos con el código, nuestra Clase Principal sera un programa simple:

public class Employee{
     public double salary;
}


Esta clase no tiene mucho "chiste", es solo una clase con una variable global llamada salary.

Ahora el código para nuestra Clase de Casos de Prueba escribiremos la siguiente clase:

import org.junit.Test;
import org.junit.Assert;


public class TestEmployee{
     @Test
     public void testSalary(){
          Employee e=new Employee();
          e.salary=0;
          Assert.assertEquals(5000,e.salary,1.0);
     }

}

Esta clase, como podrán ver no posee el método main, solo un método llamado testSalary, el cual es un Caso de Prueba. Como recordaran antes mencione que esta clase contendría todos nuestros casos de prueba; Un caso de prueba en JUnit es un pedazo de código (método) que nos sirve para probar otro pedazo de codigo (en este caso, la variable de nuestra clase Employee). Cada Caso de prueba para poder ser considerado como tal un Caso de Prueba por JUnit debe de ser precedido por @Test como se muestra en el ejemplo.

Pueden escribirse tantos Casos de Pruebas como se deseen, solo recuerden la sintaxis:

@Test
public void metodo(){
     //Codigo a probar
}

Y finalmente la Clase de Ejecucion:

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;


public class TestEmployeeRunner{
     public static void main(String args[]){
          Result result=JUnitCore.runClasses(TestEmployee.class);
          for(Failure failure:result.getFailures()){
               System.out.println(failure.toString());
               System.out.println("Message: "+failure.getMessage());
               System.out.println("Test Header: "+failure.getTestHeader());
               System.out.println("Exception is: "+failure.getException());
               System.out.println("---------------------------------");
          }


          System.out.println("Result: "+result.wasSuccessful());
          System.out.println("Run Count: "+result.getRunCount());
          System.out.println("Failure Count: "+result.getFailureCount());
          System.out.println("Run Time: "+result.getRunTime()+" miliseconds");
     }
}


Esta clase es algo complicada de entender, asi que la explicare por partes:

  • Result result=JUnitCore.runClasses(TestEmployee.class);//Esta linea de codigo nos ejecutara nuestra clase de casos de prueba y guardara en la variable result de tipo Result la informacion relacionada a esa ejecución
  • for(Failure failure:result.getFailures()){//Este es un ciclo for each en Java, el cual por cada Caso de Prueba fallado nos desplegara la Informacion requerida, cada caso de prueba fallado se guardara en la variable failure de tipo Failure
  • System.out.println(failure.toString());//Convertira nuestro objeto failure en String, el resultado de esto seria algo parecido a: testSalary(day10.TestEmployee): expected:<5000.0> but was:<1.0>
  • System.out.println("Message: "+failure.getMessage());//Nos mostrara la explicacion del porque fallo nuestro caso de prueba, algo similar a :Message: expected:<5000.0> but was:<0.0>
  • System.out.println("Test Header: "+failure.getTestHeader());
    //Nos mistrara que caso de prueba fallo: Test Header: testSalary(day10.TestEmployee)
  • System.out.println("Exception is: "+failure.getException());//Nos mostrara la Excepcion que se creo, estas pueden ser propias de Java o de JUnit, para saber esto basta con mirar de que paquete viene: Exception is: java.lang.AssertionError: expected:<5000.0> but was:<1.0>
  • System.out.println("Result: "+result.wasSuccessful());//Nos mostrara su la ejecucion fue satisfactoria(true) o no(false): Result: false
  • System.out.println("Run Count: "+result.getRunCount());//Nos mostrara el numero de Casos de Prueba que se ejecutaron: Run Count: 1
  • System.out.println("Failure Count: "+result.getFailureCount());//Nos mostrara cuantos casos de prueba fallaron: Failure Count: 1
  • System.out.println("Run Time: "+result.getRunTime()+" miliseconds");//Nos mostrara en milisegundos el tiempo que se tomo para ejecutar los Casos de Prueba: Run Time: 0 miliseconds

Como pueden ver el código es simple un poco complejo al inicio, y el uso de JUnit facilitara mucho la comprobacion de nuestro código, se puede hacer manual, pero nos tomaría mucho tiempo y llenaríamos nuestro código de lineas que realmente no son necesarias. JUnit posee muchas clases y métodos, los cuales nos serán muy útiles en el futuro, solo basta con que se sumerjan un poco a su documentacion y lo apliquen en sus proyectos. Por lo pronto es todo, me despido y espero sus comentarios y dudas...adiós ^_^/

Comments

Popular posts from this blog

Juego de Gato Usando HTML, JavaScript y CSS

AfterEffects - Quitar el Fondo de un Video Forma 1: KeyLight

Crear un nuevo Libro de Excel con VBA ES