intive Argentina Blog

Unit Testing con Mockito

Uno de los desafíos que se presentan al hacer tests unitarios es que nos encontremos con que el componente que estamos testeando depende de otros, lo que nos llevaría a tener que instanciarlos y configurarlos, acciones que implican mucho tiempo y trabajo. Para evitarlo entonces, podemos reemplazar estos componentes por Mocks.

¿Qué son los Mocks? Son objetos que imitan el comportamiento de objetos reales, a través de la implementación de una misma interfaz, devolviendo resultados determinados independientemente de los procesos complejos o interacciones que el objeto real pueda tener. Se utilizan para simular el comportamiento de objetos complejos cuando es imposible o impracticable usar el objeto real en el test. Por ejemplo, cuando el objeto en cuestión devuelve resultados no determinísticos (hora, temperatura), su estado es dificil de crear o reproducir, es lento (acceso a una BD), o su comportamiento puede cambiar. De esta forma se soluciona el problema de objetos interdependientes, en los que para probar el primero debe ser usado un objeto no probado aún, lo que invalida el test.

Mockito es una API de Java muy utilizada para testing, basada en EasyMock, creada con el objetivo de simplificar el uso de EasyMock con un API más natural y práctica.

Ejemplo de uso:

  • Se crea una instancia de la clase a testear pasándole el tipo de clase al constructor de mock:

  • Se define el comportamiento que se quiere que tenga el método que estás testeando usando

Con lo cual, en when( ) se coloca la llamada al método que se quiere testear y en thenReturn( ) lo que se quiere que devuelva: 

Entonces, por ejemplo, si se imprime esa llamada a método, va a devolver el string que se le pasó a thenReturn(), y si no se le estableció ningún valor, devuelve “null”:

Mediante then( ), se puede verificar si se aplicó determinado método y la cantidad de veces que fue aplicado usando should( ):

 

Modo de Uso

  • A la clase que se va a mockear, se le agrega la anotación @Mock.
  • Se inicializa la clase mock en el @Before.

De este modo, con el uso de Mocks simplificamos procesos y ganamos mucho tiempo valioso. Para más información, se puede consultar http://mockito.org/ y https://dzone.com/articles/getting-started-mocking-java         

Jasmina Sella Faena

Formó parte del equipo de intive – FDV como desarrollado de software e integró la Brigada Java. Entre sus aptitudes se destacan el trabajo con tecnologías como Git, Java, Python o Smalltalk. Es estudiante de ingeniería informática en la Universidad de Buenos Aires. Entre sus hobbies están hacer deportes y tocar instrumentos.

4 comentarios