Quantcast
Channel: Se hace camino al andar... » easymock
Viewing all articles
Browse latest Browse all 4

Sustitución fácil de colaboradores con Mockito

$
0
0
Acabo de probar Mockito y creo que por fin he encontrado el framework de mocks que necesitaba. Crear “stubs” para sustituir a los colaboradores en las pruebas con EasyMock o jMock me resultaba muy laborioso, en cambio con Mockito es muy fácil.

El ejemplo:


@Test
public void testComprarUnProducto() {
TerminalPuntoDeVenta tpv = new TerminalPuntoDeVenta(100,logger);

CodigoProducto codigo = new CodigoProducto("FANTA 33CL","1234567890");
DispositivoEscaner mockEscaner = mock(DispositivoEscaner.class);
when(mockEscaner.scan()).thenReturn(codigo);
tpv.setEscaner(mockEscaner);

RepositorioProductos mockRepositorioProductos = mock(RepositorioProductos.class);
Producto producto = new Producto(codigo);
producto.setPrecio(10);
when(mockRepositorioProductos.buscarProducto(codigo)).thenReturn(producto);
tpv.setRepositorioProductos(mockRepositorioProductos);

tpv.setImpresora(mock(DispositivoTicket.class));

tpv.iniciarCompra();
tpv.scan();
tpv.finalizarCompra();
double resultado = tpv.cerrarCaja();
assertEquals(110,resultado,0);
}

Los métodos estáticos mock y when son la clave, especialmente when, porque en vez de liarnos a grabar expectations como con otros frameworks, con Mockito decimos cuando llamen al objeto sustituido a tal método y con tales parámetros, entonces devuelve tal resultado. Mucho más intuitivo.

Además, como estoy intentando “quitarme” de las pruebas que comprueban las colaboraciones, me viene genial; aunque si quisiera, no tengo más que hacer los verify que también haría con los otros.

Actualización:
He sacado un rato y he escrito el mismo ejemplo pero con EasyMock.


@Test
public void testComprarUnProductoConEasymock() {
TerminalPuntoDeVenta tpv = new TerminalPuntoDeVenta(100,logger);

CodigoProducto codigo = new CodigoProducto("FANTA 33CL","1234567890");
DispositivoEscaner mockEscaner = createMock(DispositivoEscaner.class);
mockEscaner.scan();
expectLastCall().andReturn(codigo);
tpv.setEscaner(mockEscaner);

RepositorioProductos mockRepositorioProductos = createMock(RepositorioProductos.class);
Producto producto = new Producto(codigo);
producto.setPrecio(10);
mockRepositorioProductos.buscarProducto(codigo);
expectLastCall().andReturn(producto);
tpv.setRepositorioProductos(mockRepositorioProductos);

DispositivoTicket mockImpresora = createNiceMock(DispositivoTicket.class);
tpv.setImpresora(mockImpresora);

replay(mockEscaner);
replay(mockImpresora);
replay(mockRepositorioProductos);

tpv.iniciarCompra();
tpv.scan();
tpv.finalizarCompra();
double resultado = tpv.cerrarCaja();
assertEquals(110,resultado,0);
}

Viewing all articles
Browse latest Browse all 4

Latest Images

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Vimeo 10.6.2 by Vimeo.com, Inc.

Vimeo 10.6.2 by Vimeo.com, Inc.

Vimeo 10.6.1 by Vimeo.com, Inc.

Vimeo 10.6.1 by Vimeo.com, Inc.





Latest Images

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Vimeo 10.6.1 by Vimeo.com, Inc.

Vimeo 10.6.1 by Vimeo.com, Inc.