Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

258
Vistas
Cómo afirmar que dos Lists<String> son iguales, ignorando el orden

Estoy usando AssertJ y estoy tratando de afirmar que dos List<String> contienen las mismas cadenas, ignorando el orden.

 List<String> expected = Arrays.asList("Something-6144-77.pdf", "d-6144-77.pdf", "something-6144-78.pdf", "Something-6144-8068.pdf"); List<String> actual = new ArrayList<String>(); assertThat(actual.size()).isEqualTo(expected.size()); // This line gives the error: "The method containsExactlyInAnyOrder(String...) in the type ListAssert<String> is not applicable for the arguments (List<String>)" assertThat(actual).containsExactlyInAnyOrder(expected);

¿Cómo puedo solucionar el siguiente error de compilación que aparece al intentar usar containsExactlyInAnyOrder() ?

"El método containsExactlyInAnyOrder(String...) en el tipo ListAssert no es aplicable para los argumentos (List)"

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Ambas respuestas ( por jlordo y por dasblinkenlight ) funcionan, pero son soluciones alternativas en lugar de la forma correcta de hacerlo.

Hay un método en la biblioteca AssertJ para verificar específicamente si una List contiene todos los valores, independientemente del orden, en otro Iterable . Se llama containsOnlyElementsOf() :

public SELF containsOnlyElementsOf(Iterable<? extends ELEMENT> iterable)

Misma semántica que ObjectEnumerableAssert.containsOnly(Object[]) : verifica que real contiene todos los elementos del iterable dado y nada más, en cualquier orden.

Ejemplo :

Iterable<Ring> rings = newArrayList(nenya, vilya);

// assertion will pass
assertThat(rings).containsOnlyElementsOf(newLinkedList(nenya, vilya)) .containsOnlyElementsOf(newLinkedList(nenya, nenya, vilya, vilya));

// assertion will fail as actual does not contain narya
assertThat(rings).containsOnlyElementsOf(newLinkedList(nenya, vilya, narya));
// assertion will fail as actual contains nenya assertThat(rings).containsOnlyElementsOf(newLinkedList(vilya));

Entonces, este método es el que debe usar, como se muestra a continuación. No hay necesidad de convertir o transformar su List en un Array .

 assertThat(actual).containsOnlyElementsOf(expected);

Como nota al margen, su afirmación sobre el tamaño de la lista es redundante:

 assertThat(actual.size()).isEqualTo(expected.size());

Esto ya está cubierto en la afirmación de que las listas contienen los mismos elementos.

Finalmente, si necesita afirmar que una lista tiene un sitio específico, AssertJ tiene un método incorporado para esto ( hasSameSizeAs() ):

 assertThat(actual).hasSameSizeAs(expected);
about 4 years ago · Santiago Trujillo Denunciar

0

El mensaje de error te da la solución:

 The method containsExactlyInAnyOrder(String...)

String... es cualquier número de cadenas, pero también se puede pasar como una matriz:

 assertThat(actual).containsExactlyInAnyOrder((String[]) expected.toArray(new String[expected.size()]));

La conversión es necesaria aquí y ese código se proporciona bajo el supuesto de que el elemento expected se crea de manera diferente que en su ejemplo, ya que no tiene sentido convertir una matriz en una lista y viceversa.

Aquí alguna documentación para varargs (Número arbitrario de argumentos, el ... ): https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html

about 4 years ago · Santiago Trujillo Denunciar

0

Dado que el método toma String... , debe pasar una matriz en lugar de una lista:

 String[] expected = new String[] { "Something-6144-77.pdf" , "d-6144-77.pdf" , "something-6144-78.pdf" , "Something-6144-8068.pdf" };

o llámelo con la lista de elementos en línea:

 assertThat(actual).containsExactlyInAnyOrder( "Something-6144-77.pdf" , "d-6144-77.pdf" , "something-6144-78.pdf" , "Something-6144-8068.pdf" );
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda