mik*_*ent 6 java mocking verify mockito
我得到的是这一行:
verify( mockAppendable ).append( org.mockito.Mockito.contains( msg ) );
Run Code Online (Sandbox Code Playgroud)
...但我希望这个测试不分大小写。我该怎么做?
在页面上,“您可以提取方法”是什么意思,是否可以使用 Java 8 lambda 使其成为单行?
在一行中使用此处不区分大小写的代码:
verify(mockAppendable)
.append(
argThat(arg ->
Pattern.compile(Pattern.quote(msg), Pattern.CASE_INSENSITIVE).matcher(arg).find()));
Run Code Online (Sandbox Code Playgroud)
因此,他们通过跳过指定自定义错误消息来允许 lambda 版本。
而“你可以提取一个方法”,他们的意思是:
verify(mockAppendable).append(argThat(containsCaseInsensitive(msg)));
Run Code Online (Sandbox Code Playgroud)
该方法定义为:
public static ArgumentMatcher<String> containsCaseInsensitive(final string s) {
if (s == null) throw new IllegalArgumentException("s is null");
final Pattern pattern = Pattern.compile(Pattern.quote(s), Pattern.CASE_INSENSITIVE);
return new ArgumentMatcher<String>() {
@Override
public boolean matches(String arg) {
return arg != null && pattern.matcher(arg).find();
}
@Override
public String toString() {
return String.format("[should have contained, ignoring case, \"%s\"]", s);
}
};
}
Run Code Online (Sandbox Code Playgroud)
这是完全可重用的,你可以把它放在一个像 MocitoMatchers 这样的新类中,并像任何内置匹配器一样从许多测试中调用。
| 归档时间: |
|
| 查看次数: |
4946 次 |
| 最近记录: |