viernes, 26 de julio de 2013

Algunos conceptos de pruebas unitarias

Primero vamos a definir algunos conceptos:
  • Objeto mock, stubs : es un objeto falso que simula el comportamiento de un objeto verdadero,o de un objeto que aún no ha sido creado, pero necesitamos saber como actuaría.
  • Tipos de test : hay dos formas de relizar los test por estado y por interacción de objetos:
    • Estados.
    • Interacción de objetos. 
Vamos las diferencias entre mock y stubs:
  • Stubs : cuando queremos realizar pruebas por estado se recomienda los stubs, el assert no se ejecuta sobre un objeto stub, puede haber más de uno en un test y no hace que fallen los mismos, estos objetos tambíen hacen que el componente devuelva lo que se necesite cuando ejecutamos la acción.
  • Mock : es como un stub pero en vez de devolver el valor que necesitemos, lo que hace es verificar que se ha llamado al componenete que estamos testeando,  se suelen utilizar en las pruebas por interacciones, no es posible hacer mocks de singleton, los assert se ejecutan sobre los mock y si pueden hacer fallar un test.
Veamos uno ejemplo de cada tipo para comprender mejor los conceptos:

public void testStub(){
ServicioPintar servicioPintar= new ServicioPintar();
Coche coche = stub(Coche.class);

when(servicioPintar.pintarCoche()).theReturn("Coche pintado");

assert servicio.pintarCoche().equals():"el coche no se ha pintado";
}

public void testMock(){
ServicioPintar servicioPintar= new ServicioPintar();
Coche coche = mock(Coche.class); 

servicioPintar.pintarCoche());

verify(servicio.pintarCoche());
}