0% encontró este documento útil (0 votos)
261 vistas6 páginas

Mockito

Autentia ofrece servicios de desarrollo informático como desarrollo de proyectos a medida, auditoría de código, transferencia de conocimiento sobre nuevas tecnologías, soporte al arranque de proyectos, y cursos de formación. También comparten conocimiento a través de su sitio web AdictosAlTrabajo.com.

Cargado por

eze
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
261 vistas6 páginas

Mockito

Autentia ofrece servicios de desarrollo informático como desarrollo de proyectos a medida, auditoría de código, transferencia de conocimiento sobre nuevas tecnologías, soporte al arranque de proyectos, y cursos de formación. También comparten conocimiento a través de su sitio web AdictosAlTrabajo.com.

Cargado por

eze
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 6

Avenida de Castilla,1 - Edificio Best Point - Oficina 21B

28830 San Fernando de Henares (Madrid)


tel./fax: +34 91 675 33 06
[email protected] - www.autentia.com

Qu ofrece Autentia Real


Business Solutions S.L?
Somos su empresa de Soporte a Desarrollo Informtico.
Ese apoyo que siempre quiso tener...

1. Desarrollo de componentes y
proyectos a medida
2. Auditora de cdigo y recomendaciones de mejora
3. Arranque de proyectos basados en nuevas
tecnologas
1. Definicin de frameworks corporativos.
2. Transferencia de conocimiento de nuevas arquitecturas.
3. Soporte al arranque de proyectos.
4. Auditora preventiva peridica de calidad.
5. Revisin previa a la certificacin de proyectos.
6. Extensin de capacidad de equipos de calidad.
7. Identificacin de problemas en produccin.
3a

RFP

Gran Empresa

Concurso

Verificacin
previa

Consultora 1
Tecnologa
Desarrollo
Sistemas

Produccin

Consultora 2
Piloto

3b

Certificacin
o Pruebas

Consultora 3

autentia

Equipo propio desarrollo

4. Cursos de formacin (impartidos por desarrolladores en activo)


Spring MVC, JSF-PrimeFaces /RichFaces,
HTML5, CSS3, JavaScript-jQuery

Gestor portales (Liferay)


Gestor de contenidos (Alfresco)
Aplicaciones hbridas

Control de autenticacin y
acceso (Spring Security)
UDDI
Web Services
Rest Services
Social SSO
SSO (Cas)

Tareas programadas (Quartz)


Gestor documental (Alfresco)
Inversin de control (Spring)

Compartimos nuestro conociemiento en:


www.adictosaltrabajo.com

JPA-Hibernate, MyBatis
Motor de bsqueda empresarial (Solr)
ETL (Talend)
Direccin de Proyectos Informticos.
Metodologas giles
Patrones de diseo
TDD

BPM (jBPM o Bonita)


Generacin de informes (JasperReport)
ESB (Open ESB)

Para ms informacin vistenos en:


www.autentia.com

Hosting patrocinado por


Inicio

Quienes somos

Tutoriales

Formacin

Colabora

Comunidad

Comic

Charlas

NUEVO Quieres saber cunto ganas en relacin al


mercado? pincha aqu...
Ver cursos que ofrece Autentia

Ms

Catlogo de
servicios
Autentia (PDF
6,2MB)

Descargar comics en PDF y alta resolucin

En formato comic...

[NUEVO!] 2008-12-01

2008-11-17
2008-09-01
2008-07-31

Estamos escribiendo un libro sobre la profesin informtica y estas vietas formarn parte de l. Puedes opinar en la seccion comic.

Catlogo de servicios de Autentia

Tutorial desarrollado por


Germn Jimnez Centeno
tecnolgico
de
de
proyectos

i www.adictosaltrabajo.com
j
k
l
m
n
Buscar

ltimos tutoriales

Descargar (6,2 MB)


Descargar en versin comic (17 MB)

Consultor
desarrollo
informticos.

j Web
k
l
m
n

2009-01-29

Ejemplo con Mockito

AdictosAlTrabajo.com es el Web de difusin de conocimiento de


Autentia.
2009-01-29

Ingeniero en Informtica *

Uso de Mock objects en


pruebas con Mockito

Puedes encontrarme en Autentia


Somos expertos en Java/J2EE

2009-01-29

StrutsTestCase
Catlogo de cursos
2009-01-28

Descargar este documento en formato PDF: mockito.pdf

Eventos en Hibernate (parte


III)

Fecha de creacin del tutorial: 2009-01-29


2009-01-28

Mockito
Introduccin
Verificar el comportamiento
Stubbing
Argument matchers
Verficiando el numero exacto de invocaciones, al menos X, o ninguna invocacin
Stubbing metodos void methods con excepciones
Verificaciones en orden
Asegurandonos que alguna(s) interaccion(es) nunca ocurren en un mock
Buscando llamadas redundantes
@Mock
Conclusiones

Introduccin
Muchos de vosotros conoceris TDD (Test Drive development), desarrollo conducido por pruebas, donde la fuerza de nuestros
programas se basa justo en eso, en los test de las clases que vamos generando (De hecho TDD propone generar los test antes de
crear el cdigo de la clase).
Para poder crear un buen conjunto de pruebas unitarias, es necasario que nos centremos exclusivamente en la clase a testear,
simulando el funcionamiento de las capas inferiores (pensad por ejemplo en olvidarnos de la capa de acceso a datos, DAO). De esta
manera estaremos creando test unitarios potentes que os permitira detectar y solucionar los errores que tengis o que se cometan
durante el futuro del desarrollo de vuestra aplicacin.
Para esta tarea nos apoyaremos en el uso de mock objects, que no son ms que objetos que simulan parte del comportamiento de
una clase, y ms especificamente vamos a ver una herramienta que permite generar mock objects dinmicos, mockito.
Mockito est basado en EasyMock, y el funcionamiento es prcticamente parecido, aunque mejora el api a nivel sintctico, hacindolo
ms entendible para nosotros (no existe el concepto de expected, para aquellos que sepis algo de EasyMock), y adems permite
crear mocks de clases concretas (y no slo de interfaces).
La idea de las pruebas al usar mockito es el concepto de stubbing - ejecutar - verificar (programar un comportamiento, ejecutar las
llamadas y verificar las llamadas), donde centraremos nuestros esfuerzos, no en los resultados obtenidos por los mtodos a probar (o
al menos no solo en ello), si no en las interacciones de las clases a probar y las clases de apoyo, de las cuales generamos mocks.
Vamos a ver el funcionamiento de mockito con diferentes ejemplos para asi apreciar la funcionalidad y potencial de este tipo de
herramientas.
Los siguientes ejemplos van a realizar mocks sobre listas (List), simplemente porque la interfaz List es muy conocida y asi se facilita
la comprensin de dichos fragmentos de cdigo. Quizs los ejemplos parezcan demasiado simples o incluso poco lgicos, pero slo los

Eventos en Hibernate (parte


II)

2009-01-27

Eventos en Hibernate (parte


I)

2009-01-25

Aprendiendo XMLSchema a
travs de ejemplos

2009-01-20

Pruebas Software con Junit 4


y Eclipse

2009-01-19

Executor : Un programa para


ejecutarlos a todos.

2009-01-18

Soap Monitor: Monitorizacin


de mensajes SOAP en Axis2

ltimas ofertas de
empleo
2008-12-22

Otras - Mecnica - SEVILLA.

usaremos para comprender e ir conociendo el api de mockito de una manera sencilla.


2008-11-27

Recomiendo finalmente que os leis las conclusiones para aclararos posibles dudas.

Comercial - Ventas ALICANTE.

Verificar el comportamiento
Una vez realizadas las llamadas necesarias al objecto que estamos probando mediante mocks, vamos a comprobar que las
iteraciones se han realizado correctamente:
view plain

01.
02.
03.
04.
05.
06.
07.
08.
09.
10.

print

2008-10-30

Comercial - Ventas BARCELONA.

//creacion de mock
List mockedList = mock(List.class);

//utilizando el mock object

2008-10-30

T. Informacin - Analista /
Programador - BARCELONA.

mockedList.add("one");
mockedList.clear();
2008-10-27

//verificacion
verify(mockedList).add("one");
verify(mockedList).clear();

T. Informacin - Analista /
Programador - CIUDAD REAL.

Una vez creado, el mock recuerda todas las interacciones. Se puede elegir indiferentemente que interaccin verificar

Anuncios Google

Stubbing
Tambin podemos programar el comportamiento de los mocks, indicando qu deben devolver ciertos mtodos.
view plain

01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.

print

//se pueden hacer mock de clases concretas, no solo interfaces


LinkedList mockedList = mock(LinkedList.class);

//stubbing
when(mockedList.get(0)).thenReturn("first");
when(mockedList.get(1)).thenThrow(new RuntimeException());

//imprime "first"
System.out.println(mockedList.get(0));

//lanza runtime exception


System.out.println(mockedList.get(1));

//imprime "null" porque no se ha hecho stubbing de get(999)


System.out.println(mockedList.get(999));
verify(mockedList).get(0);

Por defecto todos los mtodos que devuelven valores de un mock devuelven null, una coleccin vaca o el tipo de dato primitivo
apropiado.

Argument matchers
Los arguments matchers permiten realizar llamadas a mtodos mediante 'comodines', de forma que los prametros a los mismos no
se tengan que definir explcitamente:
view plain

01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.

print

//stubbing usando anyInt() argument matcher


when(mockedList.get(anyInt())).thenReturn("element");

//stubbing usando hamcrest (libreria de matchers) (digamos que isValid() devuelve tu propio matcher):
when(mockedList.contains(argThat(isValid()))).thenReturn("element");

//imprime "element"
System.out.println(mockedList.get(999));

//tambien se puede verificar usando argument matchers


verify(mockedList).get(anyInt());

Argument matchers permiten realizar stubbing o verificaciones muy flexibles. podis ver mas en
http://mockito.googlecode.com/svn/branches/1.7/javadoc/org/mockito/Matchers.html

Verficiando el numero exacto de invocaciones, al menos X, o ninguna invocacin


Vamos a ver ahora cmo verificar si se ha un cumplido un nmero mnimo o mximo de llamadas al mock:

view plain

01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.

print

//usando mock
mockedList.add("once");
mockedList.add("twice");
mockedList.add("twice");
mockedList.add("three times");
mockedList.add("three times");
mockedList.add("three times");

//las dos verificaciones siguientes trabajan de la misma manera (times(1) se usa por defecto)
verify(mockedList).add("once");
verify(mockedList, times(1)).add("once");

//verificacion de numero exacto de invaciones


verify(mockedList, times(2)).add("twice");
verify(mockedList, times(3)).add("three times");

//verificacion utilizando never. never() es un alias de times(0)


verify(mockedList, never()).add("never happened");

//verificacion utilizando atLeast()/atMost()


verify(mockedList, atLeastOnce()).add("three times");
verify(mockedList, atLeast(2)).add("five times");
verify(mockedList, atMost(5)).add("three times");

Stubbing metodos void methods con excepciones


Veamos ahora cmo realizar stubbing de mtodos que no devuelven nada (por ejemplo para indicar que deben lanzar una
excepcin):
view plain

01.
02.
03.
04.

print

doThrow(new RuntimeException()).when(mockedList).clear();

//la siguiente llamada lanza RuntimeException:


mockedList.clear();

Verificaciones en orden
Si necesitamos que varios mock necesiten llevar un orden especfico en las llamadas lo podemos realizar de la siguiente manera:
view plain

01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.

print

List firstMock = mock(List.class);


List secondMock = mock(List.class);

//usando mocks
firstMock.add("was called first");
secondMock.add("was called second");

//creamos un objeto inOrder, pasando los mocks que necesitan verificarse en orden
InOrder inOrder = inOrder(firstMock, secondMock);

//verficamos que firstMock ha sido invocado antes que secondMock


inOrder.verify(firstMock).add("was called first");
inOrder.verify(secondMock).add("was called second");

Realizar verificaciones en orden son muy flexibles. no es necesario verificar todas las interacciones, si no slo aquellas que
necesitamos.

Asegurandonos que alguna(s) interaccion(es) nunca ocurren en un mock


view plain

01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.

print

//usando mocks - solo se interactua sobre mockOne


mockOne.add("one");

//verificacion ordinaria
verify(mockOne).add("one");

//verificamos que el metodo nunca ha sido llamado en el mock


verify(mockOne, never()).add("two");

//verificamos que otros mocks no obtienen interactuaciones


verifyZeroInteractions(mockTwo, mockThree);

Buscando llamadas redundantes


view plain

01.
02.
03.
04.
05.
06.
07.
08.

print

//usando mocks
mockedList.add("one");
mockedList.add("two");
verify(mockedList).add("one");

//la siguiente verificacion fallara


verifyNoMoreInteractions(mockedList);

Ojo! : verifyNoMoreInteractions() debe ser llamada solo cuando necesario. Realizar llamadas a este mtodo asiduamente (sobre todo
en todas las pruebas) generar test muy poco mantenibles y ampliables. Es mejor usar never() para aquellos mtodos que no deban
ser interaccionados.

@Mock

Nos permite realizar mocks anotando el cdigo, y as el mismo queda ms claro y limpio.
view plain

01.
02.
03.
04.
05.
06.
07.
08.
09.

print

public class ArticleManagerTest {


@Mock private ArticleCalculator calculator;
@Mock private ArticleDatabase database;
@Mock private UserProvider userProvider;
private ArticleManager manager;
...
}

Importante! La siguiente llamada debe encontrarse en algun lugar de una clase base o del test runner:
view plain

01.

print

MockitoAnnotations.initMocks(testClass);

O se pueden usar como runners MockitoJUnitRunner, MockitoJUnit44Runner. (veremos en otro tutorial un ejemplo).

Conclusiones
Como hemos podido ver en este tutorial, el uso de mock objects nos facilita mucho crear test unitarios que no dependen de las capas
inferiores, y por tanto prueben las clases de cierta capamucho ms exhaustivamente, permitiendo la detecci&aoacute;n de errores y
asegurndonos el buen funcionamiento durante el futuro.
Algunos, tras ver los snippets de cdigo anteriores pensaran... y para qu me sirve mockito?, por qu 'perder' el tiempo usando
mock objects cuando puedo realizar las pruebas apoyandome en otras clases que ya han sido probadas, y funcionan bien?. Es un
error. Lo primero, NUNCA se pierde tiempo en generar test ni en usar mock objects, puesto que ese cdigo nos automatizar las
tareas de pruebas nos slo durante el desarrollo, si no tambien durante las fases de mantenimiento de la aplicacin; y pensar que el
cdigo que hoy no falla no puede fallar maana es err&aoacute;neo tambin.. y si el fallo esta en las clases en las que nos
apoyamos.. nuestros tests fallaran cuando nuestras clases (puede que) funcionen bien.
Ya vis que en Autentia nos gusta trabajar bien, y con las ltimas herramientas, que nos ahorren tiempo y esfuerzo, asi que no
dud&aeacute;is en contactar con nosotros para ms informacin.

Qu te ha parecido el tutorial? Djanos saber tu opinin y vota!


Muy malo

j
k
l
m
n

Malo

j
k
l
m
n

Regular

j
k
l
m
n

Bueno

j
k
l
m
n

Muy bueno

j
k
l
m
n

Votar

Puedes opinar sobre este tutorial haciendo clic aqu.


Puedes firmar en nuestro libro de visitas haciendo clic aqu.
Puedes asociarte al grupo AdictosAlTrabajo en XING haciendo clic aqu.
Aadir a favoritos Technorati.
Esta obra est licenciada bajo licencia Creative Commons de Reconocimiento-No comercial-Sin obras derivadas
2.5

Recuerda
Autentia te regala la mayora del conocimiento aqu compartido (Ver todos los
tutoriales). Somos expertos en: J2EE, Struts, JSF, C++, OOP, UML, UP, Patrones de
diseo ... y muchas otras cosas.

Nos vas a tener en cuenta cuando necesites consultora o


formacin en tu empresa?, Vas a ser tan generoso con nosotros
como lo tratamos de ser con vosotros?
Somos pocos, somos buenos, estamos motivados y nos gusta lo que hacemos
...
Autentia = Soporte a Desarrollo & Formacin.
[email protected]

Servicio de notificaciones:

Si deseas que te enviemos un correo electrnico cuando introduzcamos nuevos tutoriales.


Formulario de subcripcin a novedades:

Aceptar

E-mail

Tutoriales recomendados
Nombre

Resumen

Fecha

EJB 3.0 y pruebas unitarias


con Maven, JUnit y
Embedded JBoss

En este tutorial Alejandro Prez nos ensea como realizar


test unitarios sobre EJB 3.0. Para ello se usar Maven,
JUnit y Embedded JBoss

Visitas Valoracin pdf

2007-08-09

5459

pdf

JUnit 4. Pruebas de
Software Java

Tutorial que describe como utilizar la herramienta JUnit 4


para realizar pruebas de integridad y errores sobre Java.

2006-06-02

12438

pdf

Pruebas Web con JWebUnit

Os mostramos como automatizar las pruebas de caja


negra (desde el punto de vista de usuario final) de
vuestro Web con el Framework gratuito JWebUnit. Esta
tcnica es perfecta para crear test de regresin de
aplicaciones Web complejas.

2004-06-30

9518

pdf

Cmo realizar pruebas


unitarias con Spring y
JUnit4 utilizando Gienah

En este tutorial vamos a presentaros Gienah, una


tecnologa que os permitir de una forma muy cmoda y
sencilla utilizar componentes de Spring en vuestros test
unitarios realizados con JUnit 4

2008-02-17

2008

pdf

Servicio Web con NetBeans


6 y prueba con SoapUI

En este tutorial os enseamos cmo crear y probar un


servicio web de una manera sencilla utilizando netbeans 6

2007-08-02

8676

pdf

Pruebas unitarias Web para


aplicaciones JSF

En este tutorial se puede encontrar una introduccin y un


anlisis de los diferentes frameworks disponibles para
realizar pruebas unitarias web de aplicaciones JSF

2006-11-13

6691

pdf

Pruebas unitarias con


jwebunit

En este tutorial nos vamos a aproximar al framework


jWebUnit, que es un proyecto muy interesante para
realizar rpidamente una buena batera de pruebas
unitarias para nuestra aplicacin web.

2006-11-17

4243

pdf

Pruebas de Rendimiento y
Funcionales Web

Jose Mara Toribio, nos ensea en este tutorial como


podemos utilizar la aplicacin gratuita JMeter para realizar
2005-04-17
pruebas de rendimiento y funcionales (vitales para la
regresin y reingeniera) sobre nuestras aplicaciones Web

35578

pdf

Pruebas de integracin con


Maven

Este tutorial nos muestra un ejemplo para lanzar las


pruebas de integracin engaando a Maven para que no
se lanzen en la fase de test teniendo nicamente un
mdulo para ambas

2007-02-08

4274

pdf

Proyecto con JSF Java


Server Faces Myfaces,
Maven y Eclipse: pruebas
con Jetty y Tomcat

Este es el tercer tutorial de la "saga" de Maven, JSF y


Eclipse, donde se va a realizar las pruebas de la aplicacin
2007-09-10
sobre dos servidores web diferentes: el servidor Jetty,
integrado en Maven, y el servidor Tomcat, que lo
integraremos con Eclipse.

6933

pdf

Nota:
Los tutoriales mostrados en este Web tienen como objetivo la difusin del conocimiento. Los contenidos y comentarios de los
tutoriales son responsabilidad de sus respectivos autores. En algn caso se puede hacer referencia a marcas o nombres cuya
propiedad y derechos es de sus respectivos dueos. Si algn afectado desea que incorporemos alguna resea especfica, no tiene
ms que solicitarlo. Si alguien encuentra algn problema con la informacin publicada en este Web, rogamos que informe al
administrador [email protected] para su resolucin.

También podría gustarte