Say I have an actual List [1, 2, 3, 4] and I want to check if it contains the sub-list [2, 3] (i.e. order is also important). Is there an existing matcher that does this?
(There's a poorly-named hasItems
method which only checks the actual list matches any one item in the expected list....)
Write your own if you can.
see Writing custom matchers
It should be something like:
public class HasSublist<T> extends TypeSafeMatcher<T> {
@Override
public boolean matchesSafely(List<T> subList) {
//Logic if sublist exist ...
return true;
}
public static <T> Matcher<T> hasSubList(List<T> containsSublist) {
return new HasSublist<T>(containsSublist);
}
}
I think there is no such predefined Matcher. I'm using AssertJ on top of JUnit so I can address this case like this:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.assertj.core.api.Assertions;
import org.junit.Test;
public class TestContains2 {
@Test
public void test_contains() {
List<Integer> a = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Assertions
.assertThat(a)
.containsSequence(2, 3);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With