Uno de los patrones más comunes en los frameworks de testing con mocks es el famoso expect-run-verify (o, como se hace en EasyMock, record-replay-verify). Y con el tiempo se está volviendo algo de lo más molesto... veamos porque:
Mockito es una librería Java para la creación de Objetos Mock muy usados para el testeo unitario en TDD, basado en EasyMock. Mockito fue creado con el objetivo de simplificar y solucionar algunos de los temas antes mencionados. EasyMock y Mockito pueden hacer exactamente las mismas cosas, pero Mockito tiene un API más natural y práctico de usar.
Las características principales de Mockito son:
Veamos un ejemplo sencillo de invocación a un método
import static org.mockito.Mockito.*; ..... //creamos el mock ArrayList instance = mock(ArrayList.class); //ejecutamos la lógica a probar instance.add("hola"); //verificamos verify(instance).add("hola");
Ahora crearemos un stub de un método para que devuelva valores
import static org.mockito.Mockito.*; ..... //creamos el mock y el stub ArrayList instance = mock(ArrayList.class); doReturn("hola mundo").when(instance).get(0); //ejecutamos la lógica a probar instance.get(0); //verificamos que se hayan invocado los métodos verify(instance).get(0);
La sintaxis para crear stubs es más simple de leer que en EasyMock, evitando varios paréntesis anidados. Sin embargo, es posible usar una sintáxis parecida a EasyMock. Por ejemplo, las dos líneas siguientes son equivalentes para mockear un método del ArrayList:
doReturn("hola mundo").when(instance).get(0); stub(instance.get(0)).toReturn("hola mundo");
Mockito les resultará muy familiar para quienes conozcan EasyMock. Y es que Mockito puede hacer todo lo que EasyMock, y de hecho es un fork de este proyecto. Simplemente cambia algunos comportamientos para facilitar su uso en el día a día.
Sin embargo, hay algunas diferencias. En Mockito:
La página Mockito vs. EasyMock tiene muchos ejemplos comparando el uso de ambos frameworks.
Pueden descargar un proyecto de ejemplo de Mockito, donde se muestran diferentes invocaciones e integración con JUnit y contiene todas las librerías necesarias para empezar.
Por otro lado, pueden descargar la librería desde la página oficial de Mockito, donde también encontrarán más ejemplos.