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