Mockito 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()); }