如何在忽略大小写的情况下为包含子字符串的字符串创建匹配器
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
我正在使用 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