How to claim that two <String> lists are equal, ignoring order
I am using AssertJ , and I am trying to claim that the two List<String>contain the same lines, ignoring the order.
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);
How can I fix the compilation error below that appears when trying to use containsExactlyInAnyOrder()?
"The method containsExactlyInAnyOrder (String ...) in the ListAssert type is not applicable for arguments (List)"
The error message gives you a solution:
The method containsExactlyInAnyOrder(String...)
String... - any number of lines, but can be passed as an array:
assertThat(actual).containsExactlyInAnyOrder((String[]) expected.toArray(new String[expected.size()]));
, , expected , , .
varargs ( , ...): https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html
(jlordo by dasblinkenlight) , , .
AssertJ , , List Iterable. containsOnlyElementsOf():
public SELF containsOnlyElementsOf(Iterable<? extends ELEMENT> iterable)
,ObjectEnumerableAssert.containsOnly(Object[]): , .
:Iterable<Ring> rings = newArrayList(nenya, vilya);// assertion will passassertThat(rings).containsOnlyElementsOf(newLinkedList(nenya, vilya)) .containsOnlyElementsOf(newLinkedList(nenya, nenya, vilya, vilya));// assertion will fail as actual does not contain naryaassertThat(rings).containsOnlyElementsOf(newLinkedList(nenya, vilya, narya));// assertion will fail as actual contains nenyaassertThat(rings).containsOnlyElementsOf(newLinkedList(vilya));
, - , , . List Array.
assertThat(actual).containsOnlyElementsOf(expected);
:
assertThat(actual.size()).isEqualTo(expected.size());
, .
, , , AssertJ (hasSameSizeAs()):
assertThat(actual).hasSameSizeAs(expected);