Утверждение, что список строк содержит строку, игнорирующую регистр
Я использую совпадения Hamcrest, чтобы утверждать, что список строк содержит строку, игнорируя регистр. Мой код выглядит следующим образом:
assertThat("myList has the string", myList, Matchers.hasItem(Matchers.equalToIgnoringCase(string)));
Но мой компилятор Java жалуется на эту строку:
cannot find symbol
[ERROR] symbol : method assertThat(java.lang.String,java.util.List<java.lang.String>,org.hamcrest.Matcher<java.lang.Iterable<? super java.lang.Object>>)
Может ли кто-нибудь помочь мне с этой ошибкой?
Благодарю.
2 ответа
Использовать equalToIgnoringCase
:
assertThat("Has potential promotion", b2BCartPage.getPromotionTexts(), hasItem(equalToIgnoringCase(messages.getString("cart.promotion.attention"))));
Вы можете создать свой собственный сопоставитель:
package com.melorriaga.movies.common;
import org.hamcrest.Description;
import org.hamcrest.Factory;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
public class CaseInsensitiveSubstringMatcher extends TypeSafeMatcher<String> {
private final String subString;
private CaseInsensitiveSubstringMatcher(final String subString) {
this.subString = subString;
}
@Override
protected boolean matchesSafely(final String actualString) {
return actualString.toLowerCase().contains(this.subString.toLowerCase());
}
@Override
public void describeTo(final Description description) {
description.appendText("containing substring \"" + this.subString + "\"");
}
@Factory
public static Matcher<String> containsIgnoringCase(final String subString) {
return new CaseInsensitiveSubstringMatcher(subString);
}
}
Использование:
@Test
public void test() {
List<String> myList = Arrays.asList("a", "b", "c");
assertThat("myList has the string", myList, hasItem(containsIgnoringCase("b")));
}
Возможно, вы попробуете.
@Test
void containsIgnoreCase() {
List<String> given = Arrays.asList("Alpha", "Beta");
assertThat(given).anyMatch(s -> s.equalsIgnoreCase("alpha"));
// if you favor method references over lamdas
assertThat(given).anyMatch("alpha"::equalsIgnoreCase);
}
Большой плюс для assertj в том, что вы можете легко использовать завершение кода.