Mis primeros pasos en Unit Testing – JAVA

Bueno, les cuento que me estoy introduciendo al mundo de las unidades de prueba, es una manera bastante entretenida de programar, y sin duda es una buena práctica, porque nos puede dejar seguros (despues de escribir una prueba unitaria para una determinada clase, metodo…) de que si esta parte del software cambia, entonces nosotros lo sabremos.

Básicamente las herramientas que he comenzado a explorar para realizar esto son JUnit 4, EasyMock y un buen entorno de desarrollo para facilitarme el trabajo, ésta vez decidí usar Netbeans 6.5, éste nos puede ayudar creándonos las plantillas para nuestras pruebas unitarias, bueno a continuacion les dejo un ejemplo de una simple prueba unitaria sin el uso de Mocks, esto lo dejaré para otra ocasión:

— Divisor.java —

</pre>
public class Divisor {

public static double dividir(int a, int b) throws Exception {
if (b == 0 ) {
throw new Exception("Intento de dividir entre cero");
}
double c = (float) a / (float) b;
return c;
}

public static void main(String[] args) throws Exception {
System.out.println(Divisor.dividir(3, 0));
}
}

— DivisorTest.java —

</pre>
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

public class DivisorTest {

public DivisorTest() {
}

/**
* Test of dividir method, of class Divisor.
*/
@Test(expected = Exception.class)
public void testDividir() throws Exception {
System.out.println("dividir");
int a = 4;
int b = 0;
Divisor.dividir(a, b);

}
@Test
public void testDivisorHappyPath() throws Exception {
System.out.println("Happy Path");
int a = 6;
int b = 3;
double expected = 2;
assertEquals(Divisor.dividir(a, b), expected, 0);
}
}

Creen la clase Divisor dentro de cualquier proyecto de Netbeans, y luego generen DivisorTest usando el Netbeans, para esto vayan a New y luego “Test for existing Class”, seleccionan la clase Divisor y Netbeans generara una plantilla que luego puedenmodificar para que se parezca a la de arriba. Ahora que ya tienen la clase y el test para un método de la misma pueden ejecutar el test haciendo clic en Run (con el test en la ventana actual), entonces verán un mensaje que confirmará el estado de los tests.

Bueno, con respecto a los métodos usados en este ejemplo:

@Test(expected = Exception.class) —-> Junit espera que este metodo de prueba arroje esta excepcion, y lo hara pues nuestra clase Divisor lo arroja cuando intentas dividir entre cero

assertEquals(Divisor.dividir(a, b), expected, 0); —-> Junit le da su visto bueno a este metodo de prueba si esto se cumple

Happy Path —–> http://en.wikipedia.org/wiki/Happy_path no es gracioso el termino??

Ahora, para que sirve esto realmente? Bueno imaginen que un día llegan de una fiesta(Ebrios) a casa y sin darse cuenta siquiera abren el Netbeans y modifican la clase Divisor, de tal forma que simplemente ya no funciona. Si escribieron un test para las diversas formas en las que ésta puede utilizarse lo mas probable es que al día siguiente, cuando se den cuenta de que hay un error, baste con ejecutar los tests para que estos le digan como está fallando su clase, ahora imaginen que tienen muchas clases, propensas a fallar después de darles mantenimiento (o de llegar ebrio a casa xD), acaso no creen que un unit test que nos haga recordar como deben funcionar nuestras clases no nos ayudaría?

One thought on “Mis primeros pasos en Unit Testing – JAVA”

Leave a Reply

Your email address will not be published. Required fields are marked *