Saltar al contenido

mockito anyList de un tamaño dado

Esta crónica fue aprobado por especialistas para garantizar la exactitud de este tutorial.

Solución:

Una forma es usar un Captor

ArgumentCaptor captor = ArgumentCaptor.forClass(List.class);
verify(mock).createButtons(captor.capture());
assertEquals(x, captor.getValue().size()); // or if expecting multiple lists:
assertEquals(x, captor.getValues().size());

Consulte http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#15 para obtener la documentación.

También puede usar un comparador de argumentos personalizado. La documentación muestra un ejemplo que hace exactamente lo que quieres:

http://docs.mockito.googlecode.com/hg/org/mockito/ArgumentMatcher.html

 class IsListOfTwoElements extends ArgumentMatcher 
     public boolean matches(Object list) 
         return ((List) list).size() == 2;
     
 

 List mock = mock(List.class);
 when(mock.addAll(argThat(new IsListOfTwoElements()))).thenReturn(true);
 mock.addAll(Arrays.asList("one", "two"));
 verify(mock).addAll(argThat(new IsListOfTwoElements()));

Por ejemplo, también podría agregar un constructor para que pueda especificar el tamaño de lista deseado, etc.

Hamcrest (frasco de la biblioteca Hamcrest) proporciona una forma más simple.

verify(mock).addAll((List) argThat(IsCollectionWithSize.hasSize(4)));

o con static import org.hamcrest.collection.IsCollectionWithSize;

verify(mock).addAll((List) argThat(hasSize(4)));

Con Mockito 3.x puede usar expresiones lambda de Java 8:

verify(mock).createButtons(argThat(list -> list.size() == 5));

Con Mockito 2.x similar:

verify(mock).createButtons(argThat(list -> ((List) list).size() == 5));

Para comprobar el vacío es aún más fácil:

verify(mock).createButtons(argThat(List::isEmpty));

Aquí tienes las reseñas y calificaciones

Agradecemos que desees añadir valor a nuestro contenido cooperando tu veteranía en las referencias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *