На данный момент в этом исправлении нет никакого помощника, несмотря на то, что вы можете комбинировать несколько, это пока невозможно.
Итак, в таких случаях, как ваше, лучшее решение на мой взгляд - Создайте свой собственный матчи Почему?
- Он может быть использован повторно
- ремонтопригодно
- ли более читаемым
Так что в вашем случае вы должны соответствовать первый список содержит любую строку второй, вы может создать соответствующий, как следующий:
public class ContainsStringsOf extends BaseMatcher<List<String>> {
private final List<String> valuesToCompare;
public ContainsStringsOf(List<String> valuesToCompare) {
this.valuesToCompare = valuesToCompare;
}
@Override
public void describeTo(Description description) {
description.appendText("doesn't contains all of " + valuesToCompare.toString() + " text");
}
@Override
public boolean matches(Object o) {
List<String> values = (List<String>) o;
for (String valueToCompare : valuesToCompare) {
boolean containsText = false;
for (String value : values) {
if (value.contains(valueToCompare)) {
containsText = true;
}
}
if (!containsText) {
return false;
}
}
return true;
//note: you can replace this impl with java-8 @florian answer comparison
//return valuesToCompare.stream().allMatch(exp -> strings.stream().anyMatch(st-> st.contains(exp)))
}
@Factory
public static Matcher<List<String>> containsStringsOf(List<String> collection) {
return new ContainsStringsOf(collection);
}
}
Тогда вы можете использовать его как раз в качестве совпадающего помощника:
List<String> expectedStrings = Arrays.asList("link1", "link2");
List<String> strings = Arrays.asList("lalala link1 lalalla", "lalalal link2 lalalla");
Assert.assertThat(strings , containsStringsOf(expectedStrings));
Вам нужно будет сообщить нам, что вы пробовали. –