sábado, 26 de enero de 2008

easyMock

EasyMock es una libreria muy util para hacer pruebas unitarias con JUnit. Nos sirve para crear cualquier objeto fantasma (mock) y hacer que devuelva un resultado concreto para una entrada concreta.

Ejemplo de test


import junit.framework.TestCase;
import org.easymock.EasyMock;


public class AutoTest extends TestCase{

private Fabrica fabrica;

@Override
protected void setUp() throws Exception {
super.setUp();

fabrica = EasyMock.createMock(Fabrica.class);

Motor motorFerrari = new MotorImpl(2500);
Ferrari ferrari = new Ferrari();
ferrari.setMotor(motorFerrari);
EasyMock.expect(fabrica.getFerrari()).andReturn(ferrari).times(5);

Motor motorPorche = new MotorImpl(1000);
Porche porche = new Porche();
porche.setMotor(motorPorche);
EasyMock.expect(fabrica.getPorche()).andReturn(porche).times(5);

EasyMock.replay(fabrica);
}

public void testCilindrada() {

Automovil porche = fabrica.getPorche();
Motor motorPorche = porche.getMotor();
assertEquals(motorPorche.getCilindrada(), 1000);

Automovil ferrari = fabrica.getFerrari();
Motor motorFerrari = ferrari.getMotor();
assertTrue(motorFerrari.getCilindrada() > motorPorche.getCilindrada());
}
}


Interfaz fábrica

public interface Fabrica {

Automovil getPorche();

Automovil getFerrari();

}

Clase Auto

public abstract class Auto {

private Motor motor;

public Motor getMotor() {
return this.motor;
}

public void setMotor(Motor motor) {

this.motor = motor;
}
}


Interfaz Automovil

public interface Automovil {

public Motor getMotor();

}

Clase Ferrari

public class Ferrari extends Auto implements Automovil { }


Clase Porche

public class Porche extends Auto implements Automovil { }


Interfaz Motor

public interface Motor {

public int getCilindrada();

}


Clase Motor

public class MotorImpl implements Motor {

private int cilindrada;

public MotorImpl(int cilindrada) {

this.cilindrada = cilindrada;
}

public int getCilindrada() {
return this.cilindrada;
}
}

No hay comentarios: