我需要Matcher <string> containsString(Matcher <string> matcher),我做错了吗?</string> </string>

时间:2014-11-05 16:24:35

标签: java hamcrest

我想检查字符串是否包含另一个字符串,忽略大小写。基本上,我想这样做:

assertThat(dialogTitle.getText(), containsString(equalToIgnoringCase("Diagram")));

但我找不到另一个Matcher<String>的{​​{1}}。有没有不同的方法来实现这个目标?

1 个答案:

答案 0 :(得分:4)

您可以通过从SubstringMatcher包中扩展org.hamcrest.core来实现自己的匹配器:

public class StringContainsIgnoringCase extends SubstringMatcher {
    public StringContainsIgnoringCase(String substring) {
        super(substring);
    }

    @Override
    protected boolean evalSubstringOf(String s) {
        return s.toLowerCase().contains(substring.toLowerCase());
    }

    @Override
    protected String relationship() {
        return "containing (ignoring case)";
    }

    public static Matcher<String> containsStringIgnoringCase(String substring) {
        return new StringContainsIgnoringCase(substring);
    }

}

用法:

assertThat(dialogTitle.getText(), StringContainsIgnoringCase.containsStringIgnoringCase("Diagram"));

为了便于阅读,您可以进行静态导入,然后获得:

assertThat(dialogTitle.getText(), containsStringIgnoringCase("Diagram"));

你要求的匹配器已经在master branch of the JavaHamcrest project,不幸的是它不在Hamcrest(1.3)的最新版本中。