java - 我需要 Matcher<String> containsString(Matcher<String> matcher),我做错了什么吗?

标签 java hamcrest

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

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

但我找不到 Matcher<String>需要另一个 Matcher<T> .是否有不同的方法来实现这一目标?

最佳答案

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

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) 中。

关于java - 我需要 Matcher<String> containsString(Matcher<String> matcher),我做错了什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26762099/

相关文章:

java - 如何防止 Spring AMQP 阻塞未确认的消息?

java - org.springframework.mapping

java - Mockito's Matcher vs Hamcrest Matcher?

java - 在不使用 Collections.shuffle 的情况下,如何在 Java 中获取列表的随机子集?

java - 检查 "http_status/100 != 2"比 "http_status != 200"好

java - 如何使用 jsonpath 和 hamcrest 断言 json 属性大于 0?

java - 在没有 ArgumentCaptor 的情况下匹配可变对象

java - 如何断言集合中的所有元素都具有它们之间相等的属性?

java - spring mvc删除用户出错

java - 为什么不允许使用assertThat(map1, sameInstance(map2))?