martes, 22 de enero de 2008

EasyMock

EasyMock es una librería que trabaja con JUnit para el desarrollo orientado a pruebas. Pongamos que estamos trabajando en un gran proyecto en el cual cada programador ha recibido de el analista la definicion de las entidades o clases junto con las interfaces que representaran a estas clases.

Por ejemplo :

El programador A tiene que codificar una clase para que se conecte con otra clase y a través del metodo dameTelefono(usuario) pasandole un usuario esta otra clase le devuelva una cadena con el telefono del usuario.

El programador B tiene que codificar una clase que implemente un metodo es decir que tenga un metodo dameTelefono(Usuario usuario) que cuando reciba una llamada con un usuario este realice una llamada al servicio de base de datos y devuelva el telefono del usuario en cuestion.

Este seria el encargo del analista a los programadores. Pero la facilidad que nos da la libreria EasyMock es que el programador A sea totalmente independiente del programador B a la hora de probar y desarrollar su codigo ya que podriamos crear un objeto Mock que nos devolviera lo que nos han dicho que ha de devolvernos el objeto con el que vamos a conectarnos y nosotros no estamos desarrollando.

Para poder crear objetos Mock necesitamos la interface de dicho objeto, en este caso necesitariamos la interface de la clase ServicioDeTelefonos.class que con la que vamos a hablar para que nos devuelva el telefono a partir de un usuario enviado.

Un ejemplo de codificacion seria :


El programador A codificaria :

//Este seria el nombre de nuestro metodo de pruebas ya que la clase que vamos a probar es la de ControladorPeticionesUsuario.class que es la que ha de realizar el programador A
public class void TestControladorPeticionesUsuario(){
//creamos nuestros objetos
ControladorPeticionesUsuario controlador = new ControladorPeticionesUsuario();
Usuario usuario = new Usuario();

//me creo el objeto Mock a partir de la interface ServicioDeTelefonos.class
ServicioDeTelefonos servicioTelefonico = EasyMock.createMock(ServicioDeTelefonos.class);

//reseteamos el objeto Mock antes de empezar a funcionar con el.
EasyMock.reset(servicioTelefonico);


//esta linea es la clave de la utilidad de EasyMock, usando el metodo expect(.....) le indicamos lo que esperamos que haga con el objeto Mock "servicioTelefonico" que hemos creado antes y le decimos que cuando alguien se ponga en contacto con su metodo dameTelefono(usuario) le devuelva la cadena "656656565" mediante .andReturn("656656565") que es lo que nos han indicado en la especificaciones que nos va a devolver.
EasyMock.expect(servicioTelefonico.dameTelefono(usuario)).andReturn("656656565");

//ahora ponemos el objeto Mock "servicioTelefonico a funcionar.
EasyMock.replay(servicioTelefonico);

//inyectamos el objeto Mock a las propiedades de nuestra clase para que puedan hablar.
controlador.servicioTelefonico = servicioTelefonico;

//hacemos la llamada al metodo que estamos probando de nuestra clase. en el interior de ella tendremos que ponernos en contacto con ServicioDeTelefonos que antes hemos referenciado, es decir dentro de nuestro metodo dameTelefono(usuario) tendremos una linea como esta: return this.servicioTelefonico.dameTelefono(usuario);
String telefono = controlador.dameTelefono(usuario);

//por ultimo se hace una llamada al metodo verify(.....) para verificar que el objeto ha sido usado.
EasyMock.verify(servicioTelefonico);

//podriamos verificar que todo ha cumplido su objetivo imprimiendo el telefono que hemos puesto para que devolviera el objeto fantasma o Mock

System.out.println("El telefono es : " + telefono);
}

Es asi de sencillo. si teneis alguna duda o necesitais el tipico empujon ya sabeis por donde andamos......


rOVE

1 comentario:

Juan Antonio Ruz dijo...

NO ES PARA JUNIT!!!! es para realizar pruebas de caja blanca