Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

259
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda