断言字符串列表包含忽略大小写的字符串

Arp*_*t M 5 java junit hamcrest junit4

我使用 Hamcrest 匹配器断言字符串列表包含字符串,忽略大小写。我的代码如下:

assertThat("myList has the string", myList, Matchers.hasItem(Matchers.equalToIgnoringCase(string)));
Run Code Online (Sandbox Code Playgroud)

但我的 java 编译器抱怨这一行:

assertThat("myList has the string", myList, Matchers.hasItem(Matchers.equalToIgnoringCase(string)));
Run Code Online (Sandbox Code Playgroud)

谁能帮我解决这个错误吗?

谢谢。

Mat*_*aga 2

您可以创建自己的匹配器:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

@Test
public void test() {
    List<String> myList = Arrays.asList("a", "b", "c");
    assertThat("myList has the string", myList, hasItem(containsIgnoringCase("b")));
}
Run Code Online (Sandbox Code Playgroud)