TesterMockito es una librería Java para poder crear objetos mock en las pruebas unitarias, que se integra muy bien con JUnit. Con Mockito podemos simular el comportamiento de las dependencias del objeto bajo prueba, creando así un entorno perfecto para aislar al objeto. Ya en otros artículos vimos como empezar a usar Mockito en nuestros proyectos. Sin embargo, el API de Mockito no se adapta bien a los conceptos de BDD... ¡bienvenido BDDMockito! 

Pruebas unitarias con sabor a BDD - La plantilla definitiva

Uno de los conceptos de BDD es dividir las pruebas en 3 grandes secciones: 

Dado ,
Cuando,
Entonces

(o en inglés, given - when - then).

Lo interesante es que podemos estructurar nuestras pruebas unitarias con el formato given - when -then, más allá de BDD. De esta manera, nuestras pruebas unitarias quedarán más simples de leer y ordenadas. Con 3 simples comentarios podemos dividir estas secciones en una prueba cualquiera.

Entonces, podemos crear la "Plantilla Definitiva para JUnit", de manera muy sencilla:

 
@Test
public void unMetodoDePrueba() {
 
    //given
 
    //when
 
    //then
 
}
 

BDDMockito

¿Y qué tiene que ver BDDMockito en todo esto? Evidentemente podemos usar la plantilla anterior con cualquier cosa... el tema es que el API de Mockito usa la palabra "when" en sus expresiones para declarar el escenario (el cual forma parte del given). BDDMockito es una clase que simplemente presenta el método given(Object) para que quede bien integrado con los conceptos de BDD. Es decir, es un simple cambio cosmético que simplifica la legibilidad del código.

De esta manera, con BDDMockito podemos escribir: 

 
 import static org.mockito.BDDMockito.*;
 
 Vendedor vendedor = mock(Vendedor.class);
 Negocio negocio = new Negocio(vendedor);
 
 @Test
 public void comprarPan() throws Exception {
   //given  
   given(vendedor.buscarPan()).willReturn(new Pan());
 
   //when
   Compra compra = negocio.comprarPan();
 
   //then
   assertThat(compra, contienePan());
 }
 

Aprender más

Inspiración.

"Si tú tienes una manzana y yo tengo una manzana e intercambiamos las manzanas, entonces tanto tú como yo seguiremos teniendo una manzana cada uno. Pero si tú tienes una idea y yo tengo una idea, e intercambiamos las ideas, entonces ambos tendremos dos ideas"

Bernard Shaw