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)"

+4
source share
3 answers

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

+3

String..., :

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

:

assertThat(actual).containsExactlyInAnyOrder(
    "Something-6144-77.pdf"
,   "d-6144-77.pdf"
,   "something-6144-78.pdf"
,   "Something-6144-8068.pdf"
);
+3

(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 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));

, - , , . List Array.

assertThat(actual).containsOnlyElementsOf(expected);

:

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

, .

, , , AssertJ (hasSameSizeAs()):

assertThat(actual).hasSameSizeAs(expected);
+2

Source: https://habr.com/ru/post/1673353/


All Articles