如何在忽略大小写的情况下为包含子字符串的字符串创建匹配器

How can make a matcher for a string containing a substring, while ignoring case

我正在使用 mockito 编写单元测试来模拟依赖项并检查我们是否使用正确的参数调用它。我们应该传入一个字符串,所以我尝试匹配该函数参数,但不对整个字符串进行断言,以防我们更改措辞。所以我只想匹配消息中的一个词,但该词可能位于句子的开头或中间,因此它可能以大写字母开头。

飞镖匹配器有 equalsIgnoringCase, and contains,但我找不到任何匹配器同时处理这两种匹配器,比如 containsIgnoringCase。有什么方法可以检查子字符串,同时忽略匹配器中的大小写吗?

您可以将正则表达式传递给 contains 方法,并将 caseSensitive 属性 设置为 false

string.contains(new RegExp(r'your-substring', caseSensitive: false));

最简单的方法?这就是我在 DART 中所做的,但我相信它适用于所有语言。

 if (string1.toLowerCase().contains(string2.toLowerCase())) {
    //TODO: DO SOMETHING
  }

由于 OP 更新了问题,并限制它应该是一个 Matcher(对于 mockito):

可以使用 predicate 使用任意代码创建匹配器。在这种情况下,使用 Ajmal 的答案:

Matcher containsSubstringNoCase(String substring) =>
  predicate((String expected) => expected.contains(RegExp(substring, caseSensitive: false)));

然后:

expect('Foo', containsSubstringNoCase('foo'));  // true