Desde este modesto blog os deseo un Feliz 2009.
Yearly Archives: 2008
Editor para Concordion
He basado el desarrollo en el ejemplo de editor multipágina que viene con Eclipse y en el WicketBench, un editor para Wicket que hace muchas más cosas y del que he tomado prestadas algunas ideas también para el futuro. Sin embargo, aún tengo que trabajar mucho este plugin porque es la primera vez que hago algo útil con Eclipse RCP y tengo mucho que aprender. De momento, los siguientes pasos serán:
- hacer pruebas unitarias (para poder refactorizar)
- refactorizar (es mejor no mirar al código ahora mismo)
- crear automáticamente el desplegable en forma de site (ahora es un jar que construyo manualmente)
Podéis descargar el jar y simplemente dejarlo en la carpeta “plugins” de vuestra instalación de Eclipse.
Felices Fiestas a todos, por cierto.
Sustitución fácil de colaboradores con Mockito
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); }