diff --git a/src/main/java/shopmanager/BagManager.java b/src/main/java/shopmanager/BagManager.java index d971efe..12fe91f 100644 --- a/src/main/java/shopmanager/BagManager.java +++ b/src/main/java/shopmanager/BagManager.java @@ -17,7 +17,7 @@ import model.Order; /** - * @author Isabel Román + * @author Isabel Rom�n * Gestor de la cesta de la compra * */ @@ -26,31 +26,31 @@ public interface BagManager { /** * - * Añade a la cesta tantas unidades del producto pasado como parámetro como indique getNumber() del mismo, actualiza Stock eliminado las unidades añadidas + * A�ade a la cesta tantas unidades del producto pasado como par�metro como indique getNumber() del mismo, actualiza Stock eliminado las unidades a�adidas * - * @param newProduct producto a añadir, en el número de unidades se indica cuántas unidades se añaden - * debe verificar si hay en stock, si no no se añaden y debería lanzar la excepción NoEnoughStock - * actualiza stock disminuyendo el número de unidades añadidas y aumenta el número de unidades en la cesta - * @return El producto tal y como está en la cesta - * @throws NoEnoughStock si el número de unidades en el stock no es suficiente + * @param newProduct producto a a�adir, en el n�mero de unidades se indica cu�ntas unidades se a�aden + * debe verificar si hay en stock, si no no se a�aden y deber�a lanzar la excepci�n NoEnoughStock + * actualiza stock disminuyendo el n�mero de unidades a�adidas y aumenta el n�mero de unidades en la cesta + * @return El producto tal y como est� en la cesta + * @throws NoEnoughStock si el n�mero de unidades en el stock no es suficiente * @throws NotInStock si el producto no existe en el stock */ Product addProduct(Product newProduct) throws NoEnoughStock,NotInStock; /** * - * Elimina de la cesta tantas unidades del producto pasado como parámetro como indique getNumber() del mismo, el número mínimo de unidades final es cero + * Elimina de la cesta tantas unidades del producto pasado como par�metro como indique getNumber() del mismo, el n�mero m�nimo de unidades final es cero * * @param oldProduct producto a eliminar, se eliminan las unidades que se marquen, actualiza stock aumentando estas unidades liberadas - * @return newProduct, el producto, indicando el número de unidades que quedan en la cesta + * @return newProduct, el producto, indicando el n�mero de unidades que quedan en la cesta * @throws NotInStock si el producto no estaba en el stock */ Product lessProduct(Product oldProduct) throws NotInStock; /** * Elimina completamente el producto, actualiza stock sumando las unidades liberadas * - * @param oldProduct el producto con el número de elementos que se quieren liberar - * @return devuelve true si se eliminó, false si el producto no estaba en la cesta - * @throws NotInStock si no existía en el stock este producto + * @param oldProduct el producto con el n�mero de elementos que se quieren liberar + * @return devuelve true si se elimin�, false si el producto no estaba en la cesta + * @throws NotInStock si no exist�a en el stock este producto * */ boolean removeProduct(Product oldProduct) throws NotInStock; @@ -65,16 +65,16 @@ public interface BagManager { /** * - * Obtiene la cesta como una colección (Sea cual sea la forma interna de almacenar los productos) + * Obtiene la cesta como una colecci�n (Sea cual sea la forma interna de almacenar los productos) * @return devuelve la cesta como una lista de productos */ Collection getBag(); /** * - * Devuelve el producto cuyo id se pasa como parámetro encapsulado en un objeto Optional + * Devuelve el producto cuyo id se pasa como par�metro encapsulado en un objeto Optional * @see java.util.Optional * @param productId el id del producto a buscar - * @return el producto, con el número de unidades del mismo, si es cero es que no estaba en la cesta + * @return el producto, con el n�mero de unidades del mismo, si es cero es que no estaba en la cesta */ Optional findProduct(String productId); /** @@ -82,7 +82,7 @@ public interface BagManager { * Devuelve el producto de la bolsa que se corresponde con el id del pasado, encapsulado en un objeto Optional * @see java.util.Optional * @param product producto a buscar - * @return el producto, con el número de unidades del mismo, si es cero es que no estaba en la cesta + * @return el producto, con el n�mero de unidades del mismo, si es cero es que no estaba en la cesta */ Optional findProduct(Product product); /** @@ -92,7 +92,7 @@ public interface BagManager { Order order(); /** - * Inicializa la cesta a cero, borra todo lo que había restaurando el stock + * Inicializa la cesta a cero, borra todo lo que hab�a restaurando el stock */ void reset(); /** @@ -107,7 +107,7 @@ public interface BagManager { Iterator getIdIterator(); /** * - * @return un iterador que recorre la cesta por número de unidades, de más a menos + * @return un iterador que recorre la cesta por número de unidades, de más a menos */ Iterator getUnitsIterator(); diff --git a/src/main/java/shopmanager/MyBagManager.java b/src/main/java/shopmanager/MyBagManager.java index 1540eb4..dd4e411 100644 --- a/src/main/java/shopmanager/MyBagManager.java +++ b/src/main/java/shopmanager/MyBagManager.java @@ -21,10 +21,11 @@ import model.MyOrder; import model.Order; import model.Product; +import model.UnitsComparator; import persistency.OrderRepository; import shopmanager.StockManager; /** - * @author Isabel Román + * @author Isabel Rom�n * */ public class MyBagManager implements BagManager { @@ -35,7 +36,7 @@ public class MyBagManager implements BagManager { private Order order; /** - * Al hacer privado el constructor obligo a que la construcción del objeto se haga siempre a través de newBag + * Al hacer privado el constructor obligo a que la construcci�n del objeto se haga siempre a trav�s de newBag */ public MyBagManager(){ cesta=new HashMap(); @@ -51,7 +52,7 @@ public MyBagManager(OrderRepository repo,StockManager stockManager){ @Override public Product addProduct(Product newProduct)throws NoEnoughStock, NotInStock{ - String msg="El id del producto es "+newProduct.getId()+" y las unidades a añadir"+newProduct.getNumber(); + String msg="El id del producto es "+newProduct.getId()+" y las unidades a a�adir"+newProduct.getNumber(); trazador.info(msg); //quito del stock las unidades solicitadas, si no hubiera suficientes lanza NoEnoughStock, si el producto no existe lanza NotInStock stock.lessProduct(newProduct); @@ -87,7 +88,7 @@ public void removeProduct(String productId)throws NotInStock { @Override public Collection getBag() { - return (List) cesta.values(); + return (Collection) cesta.values(); } @Override @@ -106,7 +107,7 @@ public Optional findProduct(Product product) { @Override public Order order() { - // No crea el objeto order, aún no está resuelto quién será el responsable de elegir el tipo concreto + // No crea el objeto order, a�n no est� resuelto qui�n ser� el responsable de elegir el tipo concreto try{ trazador.info("Intento persistir el stock"); stock.save(); @@ -116,7 +117,7 @@ public Order order() { repositorio.save(order); } catch (UnknownRepo ex) { - trazador.info("No ha sido posible guardar el pedido, no se estableció el repositorio en el stock"); + trazador.info("No ha sido posible guardar el pedido, no se estableci� el repositorio en el stock"); } return order; @@ -124,29 +125,26 @@ public Order order() { @Override public void reset() { - // Debería restaurar el stock, pero por ahora no se hace, sólo borra + // Deber�a restaurar el stock, pero por ahora no se hace, s�lo borra cesta.clear(); } - - - @Override - public Iterator getPrizeIterator() { - // TODO Auto-generated method stub - return null; - } @Override + public Iterator getUnitsIterator(){ + // Ordena la cesta segun las unidades de producto y devuelve un tipo iterador + Collection Cesta = this.getBag(); + List OrdenarCesta = new ArrayList(Cesta); + Collections.sort(OrdenarCesta, new UnitsComparator()); + + return OrdenarCesta.listIterator(); + } + @Override public Iterator getIdIterator() { ArrayList productosEnCesta = new ArrayList(cesta.values()); Collections.sort(productosEnCesta, new IdComparator()); return productosEnCesta.listIterator(); } - @Override - public Iterator getUnitsIterator() { - // TODO Auto-generated method stub - return null; - } } diff --git a/src/test/java/shopManager/BagManagerTest.java b/src/test/java/shopManager/BagManagerTest.java index 3a13782..14adfd8 100644 --- a/src/test/java/shopManager/BagManagerTest.java +++ b/src/test/java/shopManager/BagManagerTest.java @@ -7,12 +7,13 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.mockitoSession; - import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.logging.Logger; + + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -40,8 +41,8 @@ /** - * @author Isabel Román - * Clase para realizar los test a la clase MyBagManager, o a cualquier otra clase que implemente BagManager siempre que se sustituya la declaración private static MyBagManager micestaTesteada; + * @author Isabel Román + * Clase para realizar los test a la clase MyBagManager, o a cualquier otra clase que implemente BagManager siempre que se sustituya la declaración private static MyBagManager micestaTesteada; * */ @ExtendWith(MockitoExtension.class) @@ -49,16 +50,19 @@ class BagManagerTest { private static Logger trazador=Logger.getLogger(ProductTest.class.getName()); //Creo los objetos sustitutos (representantes o mocks) - //Son objetos contenidos en MyBagManager de los que aún no disponemos el código + //Son objetos contenidos en MyBagManager de los que aún no disponemos el código + @Mock(serializable = true) private static Product producto1Mock= Mockito.mock(Product.class); @Mock(serializable = true) private static Product producto2Mock= Mockito.mock(Product.class); + @Mock(serializable = true) private static Product producto3Mock= Mockito.mock(Product.class); @Mock(serializable = true) private static Product producto4Mock= Mockito.mock(Product.class); @Mock(serializable = true) private static Product producto5Mock= Mockito.mock(Product.class); + @Mock private static StockManager stockMock= Mockito.mock(StockManager.class); @Mock @@ -66,14 +70,14 @@ class BagManagerTest { @Mock private static Order orderMock=Mockito.mock(Order.class); - //Inyección de dependencias - //Los objetos contenidos en micestaTesteada son reemplazados automáticamente por los sustitutos (mocks) + //Inyección de dependencias + //Los objetos contenidos en micestaTesteada son reemplazados automáticamente por los sustitutos (mocks) @InjectMocks private static MyBagManager micestaTesteada; - //Servirán para conocer el argumento con el que se ha invocado algún método de alguno de los mocks (sustitutos o representantes) - //ArgumentCaptor es un genérico, indico al declararlo el tipo del argumento que quiero capturar + //Servirán para conocer el argumento con el que se ha invocado algún método de alguno de los mocks (sustitutos o representantes) + //ArgumentCaptor es un genérico, indico al declararlo el tipo del argumento que quiero capturar @Captor private ArgumentCaptor intCaptor; @Captor @@ -86,22 +90,21 @@ class BagManagerTest { @BeforeEach void setUpBeforeClass(){ - //Todos los tests empiezan con la bolsa vacía - + //Todos los tests empiezan con la bolsa vacia micestaTesteada.reset(); } /** - * Test para probar el método de efectuar un pedido {@link shopmanager.BagManager#order()} + * Test para probar el método de efectuar un pedido {@link shopmanager.BagManager#order()} * - * @throws NoEnoughStock Se intenta añadir un número de unidades de un producto, pero no hay suficientes en stock - * @throws NotInStock Se intenta añadir un producto, pero no existe ese tipo en el stock - * @throws UnknownRepo Se intenta guardar algo en un repositorio, pero no se ha establecido bien esta referencia y no sabe dónde guardar + * @throws NoEnoughStock Se intenta añadir un número de unidades de un producto, pero no hay suficientes en stock + * @throws NotInStock Se intenta añadir un producto, pero no existe ese tipo en el stock + * @throws UnknownRepo Se intenta guardar algo en un repositorio, pero no se ha establecido bien esta referencia y no sabe dónde guarda */ @Test @Tag("unidad") - @DisplayName("Prueba del método que asienta el pedido") - void testOrder() throws NoEnoughStock, NotInStock, UnknownRepo { + @DisplayName("Prueba del método que asienta el pedido") + void testOrder() throws NoEnoughStock, NotInStock, UnknownRepo { trazador.info("Comienza el test de order"); //Hago un pedido que no debe tener problemas trazador.info("Primero sin problemas"); @@ -117,10 +120,10 @@ void testOrder() throws NoEnoughStock, NotInStock, UnknownRepo { //EJERCICIO: Elimine este comentario, ejecute los test // Mockito.verifyZeroInteractions(repositoryMock); - // ¿Por qué falla el test si se pone aquí esta comprobación? + // ¿Por qué falla el test si se pone aquí esta comprobación? - //si no se pueda guardar el stock no se guarda el pedido, no se llega a tocar el repositorio ni se modifica order, y mi cesta gestiona la excepción, no debe propagarse y por tanto no debe lanzarla - trazador.info("Ahora hago que salte la excepción UnknownRepo en el stock, para ver si la gestiona bien BagManager"); + //si no se pueda guardar el stock no se guarda el pedido, no se llega a tocar el repositorio ni se modifica order, y mi cesta gestiona la excepción, no debe propagarse y por tanto no debe lanzarla + trazador.info("Ahora hago que salte la excepción UnknownRepo en el stock, para ver si la gestiona bien BagManager"); Mockito.doThrow(new UnknownRepo()).when(stockMock).save(); try { micestaTesteada.order(); @@ -129,8 +132,9 @@ void testOrder() throws NoEnoughStock, NotInStock, UnknownRepo { } catch(Exception e) { - //Me aseguro de que BagManager gestiona esta excepción y no la propaga - fail("BagManager debe gestionar la excepción UnknownRepo y no propagarla"); + //Me aseguro de que BagManager gestiona esta excepción y no la propaga + fail("BagManager debe gestionar la excepción UnknownRepo y no propagarla"); + } @@ -138,12 +142,12 @@ void testOrder() throws NoEnoughStock, NotInStock, UnknownRepo { /** * Test method for {@link shopmanager.BagManager#addProduct(model.Product)}. - * @throws NotInStock lanza cualquier excepción de sus clientes, no las gestiona siempre internamente - * @throws NoEnoughStock lanza cualquier excepción de sus clientes, no las gestiona siempre internamente + * @throws NotInStock lanza cualquier excepción de sus clientes, no las gestiona siempre internamente + * @throws NoEnoughStock lanza cualquier excepción de sus clientes, no las gestiona siempre internamente */ @Test @Tag("unidad") - @DisplayName("Prueba del método que añade un producto") + @DisplayName("Prueba del método que añade un producto") void testAddProduct() throws NoEnoughStock, NotInStock { Mockito.when(producto1Mock.getId()).thenReturn("id1"); Mockito.when(producto1Mock.getNumber()).thenReturn(1); @@ -153,13 +157,13 @@ void testAddProduct() throws NoEnoughStock, NotInStock { micestaTesteada.addProduct(producto1Mock); assertTrue(micestaTesteada.findProduct("id1").isPresent()); - assertEquals(1,micestaTesteada.findProduct("id1").get().getNumber(),"El producto insertado debía tener una unidad"); + assertEquals(1,micestaTesteada.findProduct("id1").get().getNumber(),"El producto insertado debía tener una unidad"); micestaTesteada.addProduct(producto2Mock); - assertEquals(2,micestaTesteada.findProduct("id2").get().getNumber(),"El producto insertado debía tener dos unidades"); + assertEquals(2,micestaTesteada.findProduct("id2").get().getNumber(),"El producto insertado debía tener dos unidades"); assertTrue(micestaTesteada.findProduct("id1").isPresent()); - /**Cuidado con los mock, no son el objeto de verdad son sustitutos y no implementan la lógica de los objetos**/ - /**Analizar por qué estos dos test que vienen a continuación no son correctos, mientras que los de arriba sí*/ + /**Cuidado con los mock, no son el objeto de verdad son sustitutos y no implementan la lógica de los objetos**/ + /**Analizar por qué estos dos test que vienen a continuación no son correctos, mientras que los de arriba sí*/ /* micestaTesteada.addProduct(producto1Mock); assertEquals(2,micestaTesteada.findProduct("id1").get().getNumber(),"El incremento de un producto en una unidad no se hace bien"); @@ -167,54 +171,57 @@ void testAddProduct() throws NoEnoughStock, NotInStock { assertEquals(4,micestaTesteada.findProduct("id2").get().getNumber(),"El incremento de un producto en dos unidades no se hace bien"); */ - //Para ver si realmente hace bien la actualización de valores lo que deberíamos es asegurar que el método + + //Para ver si realmente hace bien la actualización de valores lo que deberíamos es asegurar que el método //newProduct.setNumber(newProduct.getNumber()+antes); //se invoca con el valor correcto (no invoca la primera vez, ni la segunda porque el producto no estaba, la tercera se invoca con 2 y la cuarta con 4, porque hay que cambiarle el valor) - //estoy suponiendo que se guarda exactamente el mismo producto que se pasa, no se hace ningún tipo de copia (en realidad no tendría por qué suponer esto... + //estoy suponiendo que se guarda exactamente el mismo producto que se pasa, no se hace ningún tipo de copia (en realidad no tendría por qué suponer esto... //Es para probar las prestaciones de los ArgumentCaptors - //la segunda vez que añado el producto debe sumarse el número de unidades a las que ya había + //la segunda vez que añado el producto debe sumarse el número de unidades a las que ya había micestaTesteada.addProduct(producto1Mock); - //quiero verificar el argumento que se ha usado en el mock para poner el número de unidades + //quiero verificar el argumento que se ha usado en el mock para poner el número de unidades Mockito.verify(producto1Mock).setNumber(intCaptor.capture()); - assertEquals(2,intCaptor.getValue(), "El argumento para actualizar el número de unidades en el producto no se calcula bien"); + assertEquals(2,intCaptor.getValue(), "El argumento para actualizar el número de unidades en el producto no se calcula bien"); micestaTesteada.addProduct(producto2Mock); Mockito.verify(producto2Mock).setNumber(intCaptor.capture()); - assertEquals(4,intCaptor.getValue(), "El argumento para actualizar el número de unidades en el producto no se calcula bien"); + assertEquals(4,intCaptor.getValue(), "El argumento para actualizar el número de unidades en el producto no se calcula bien"); - //Si hay no hay stock el producto no se debe añadir, parto de nuevo de la cesta vacía + //Si hay no hay stock el producto no se debe añadir, parto de nuevo de la cesta vacía micestaTesteada.reset(); Mockito.doThrow(new NoEnoughStock(0)).when(stockMock).lessProduct(producto1Mock); try { micestaTesteada.addProduct(producto1Mock); - //debe saltar la excepción así que no debe llegar aquí - fail("No salta la excepción del stock"); + //debe saltar la excepción así que no debe llegar aquí + fail("No salta la excepción del stock"); }catch(NoEnoughStock e){ - assertEquals("No hay suficientes unidades en el Stock, sólo quedan 0",e.getMessage(),"El mensaje de la excepción no es correcto"); + assertEquals("No hay suficientes unidades en el Stock, sólo quedan 0",e.getMessage(),"El mensaje de la excepción no es correcto"); } - //Aseguro que si no había suficientes unidades no se ha agregado a la cesta + //Aseguro que si no había suficientes unidades no se ha agregado a la cesta - assertFalse(micestaTesteada.findProduct("id1").isPresent(),"Se agrega un producto cuando no había suficientes unidades"); + assertFalse(micestaTesteada.findProduct("id1").isPresent(),"Se agrega un producto cuando no había suficientes unidades"); - //Ahora pruebo la gestión de la excepción NotInStock, no se debe agregar a la cesta y debe lanzar la excepción - //aseguro que parto de la cesta vacía + //Ahora pruebo la gestión de la excepción NotInStock, no se debe agregar a la cesta y debe lanzar la excepción + //aseguro que parto de la cesta vacía micestaTesteada.reset(); Mockito.doThrow(new NotInStock("id1")).when(stockMock).lessProduct(producto1Mock); try { micestaTesteada.addProduct(producto1Mock); - //debe saltar la excepción así que no debe llegar aquí - fail("No salta la excepción NotInStock stock"); + + //debe saltar la excepción así que no debe llegar aquí + fail("No salta la excepción NotInStock stock"); }catch(NotInStock e){ - assertEquals("El producto con id id1 no existe en el Stock",e.getMessage(),"El mensaje de la excepción no es correcto"); + assertEquals("El producto con id id1 no existe en el Stock",e.getMessage(),"El mensaje de la excepción no es correcto"); } - //Aseguro que si no existía en el stock no se ha agregado a la cesta + //Aseguro que si no existía en el stock no se ha agregado a la cesta assertFalse(micestaTesteada.findProduct("id1").isPresent(),"Se agrega un producto que no existe en el stock"); + } /** @@ -273,7 +280,7 @@ void testFindProductProduct() { } /** * Rellena una cesta con los dos mocks declarados al inicio - * @throws NoEnoughStock Si no hay suficiente stock del producto a añadir + * @throws NoEnoughStock Si no hay suficiente stock del producto a añadir * @throws NotInStock Si no existe el producto en el stock */ void rellenaCesta() throws NoEnoughStock, NotInStock { @@ -284,16 +291,45 @@ void rellenaCesta() throws NoEnoughStock, NotInStock { micestaTesteada.addProduct(producto1Mock); micestaTesteada.addProduct(producto2Mock); } + + @Test + @Tag("unidad") + @DisplayName("Prueba Iterador") + void testGetUnitsIterator() throws NoEnoughStock, NotInStock + { + //Inicializo los mocks + Mockito.when(producto1Mock.getId()).thenReturn("id1"); + Mockito.when(producto1Mock.getNumber()).thenReturn(1); + Mockito.when(producto2Mock.getId()).thenReturn("id2"); + Mockito.when(producto2Mock.getNumber()).thenReturn(2); + Mockito.when(producto3Mock.getId()).thenReturn("id3"); + Mockito.when(producto3Mock.getNumber()).thenReturn(3); + //Agrego los productos a la cesta considerando que se añadieron correctamente + micestaTesteada.addProduct(producto1Mock); + micestaTesteada.addProduct(producto2Mock); + micestaTesteada.addProduct(producto3Mock); + Iterator iterador=micestaTesteada.getUnitsIterator(); + //Pruebo que no esta vacia + assertTrue(iterador.hasNext(), "El iterador esta vacio"); + //Comprobamos que esten en orden de mayor a menor. + assertTrue(producto3Mock.getNumber()==iterador.next().getNumber(), "El primer producto debe de ser el 3"); + assertTrue(iterador.hasNext(), "No se tienen todos los elementos que se metieron en la cesta"); + assertTrue(producto2Mock.getNumber()==iterador.next().getNumber(), "El segundo producto debe de ser el 2"); + assertTrue(iterador.hasNext(), "No se tienen todos los elementos que se metieron en la cesta"); + assertTrue(producto1Mock.getNumber()==iterador.next().getNumber(), "El tercer producto debe de ser el 1"); + assertFalse(iterador.hasNext(), "La cesta tiene mas productos de lo esperado"); + } + //El test se repite para reducir la probabilidad de que un orden de vuelta aleatorio pase la prueba @RepeatedTest(5) - @DisplayName("Prueba para el método getIdIterator (repetible)") + @DisplayName("Prueba para el método getIdIterator (repetible)") public void testGetIdIterator() { //Prueba basica ArrayList idList1 = new ArrayList(); idList1.add("id1");idList1.add("id2");idList1.add("id3");idList1.add("id4");idList1.add("id5"); - //Prueba con strings sin número + //Prueba con strings sin número ArrayList idList2 = new ArrayList(); idList2.add("a");idList2.add("b");idList2.add("c");idList2.add("d");idList2.add("e"); @@ -301,15 +337,15 @@ public void testGetIdIterator() { ArrayList idList3 = new ArrayList(); idList3.add("a");idList3.add("aa");idList3.add("aaa");idList3.add("aaaa");idList3.add("aaaaa"); - //Prueba con numeros (el orden de salida debe ser lexicográfico, no numérico) + //Prueba con numeros (el orden de salida debe ser lexicográfico, no numérico) ArrayList idList4 = new ArrayList(); idList4.add("24683");idList4.add("22");idList4.add("335");idList4.add("2788");idList4.add("99"); - //Prueba con caracteres extraños y espacios + //Prueba con caracteres extraños y espacios ArrayList idList5 = new ArrayList(); - idList5.add(" º?'");idList5.add(".ªº^");idList5.add("&$@ ");idList5.add("_ -*+");idList5.add("{[]}"); + idList5.add(" º?'");idList5.add(".ªº^");idList5.add("&$@ ");idList5.add("_ -*+");idList5.add("{[]}"); - //Aquí falta una prueba para el caso de ids repetidos, pero este comportamiento no está definido y no se puede probar + //Aquí falta una prueba para el caso de ids repetidos, pero este comportamiento no está definido y no se puede probar ArrayList [] tests = (ArrayList []) new ArrayList[5]; @@ -322,7 +358,7 @@ public void testGetIdIterator() { for (ArrayList idList : tests) { micestaTesteada.reset(); - //Desordenar los ID para evitar que el iterador devuelva con orden de inserción + //Desordenar los ID para evitar que el iterador devuelva con orden de inserción Collections.sort(idList); ArrayList orderedIds = new ArrayList(idList); //Id esperados en orden Collections.shuffle(idList); @@ -339,7 +375,7 @@ public void testGetIdIterator() { Mockito.when(producto5Mock.getId()).thenReturn(idList.get(4)); Mockito.when(producto5Mock.getNumber()).thenReturn(1); - //Añadir los productos Mock + //Añadir los productos Mock try { micestaTesteada.addProduct(producto1Mock); @@ -351,7 +387,7 @@ public void testGetIdIterator() { catch (Exception e) { trazador.info(e.getMessage()); - fail("Fallo crítico mientras se insertaban los productos"); + fail("Fallo crítico mientras se insertaban los productos"); } Iterator myIterator; try @@ -361,13 +397,13 @@ public void testGetIdIterator() { catch (Exception e) { trazador.info(e.getMessage()); - fail("Fallo crítico mientras se intentaba conseguir el iterador"); + fail("Fallo crítico mientras se intentaba conseguir el iterador"); } myIterator= micestaTesteada.getIdIterator(); if(!myIterator.hasNext()) { - fail("El iterador devuelto está vacío"); + fail("El iterador devuelto está vacío"); } for(String id : orderedIds) @@ -385,7 +421,7 @@ public void testGetIdIterator() { if(myIterator.hasNext()) { - fail("El iterador devuelto contiene más productos de los que debería"); + fail("El iterador devuelto contiene más productos de los que debería"); } } //fail("Not yet completely implemented, work in progress");