我所得到的是这一行:验证的Mockito参数包含另一个字符串忽略大小写
verify(mockAppendable).append(org.mockito.Mockito.contains(msg));
...但我想这个测试是区分无动于衷。我会怎么做?
我所得到的是这一行:验证的Mockito参数包含另一个字符串忽略大小写
verify(mockAppendable).append(org.mockito.Mockito.contains(msg));
...但我想这个测试是区分无动于衷。我会怎么做?
在the page,它们是什么意思,“你可以提取方法”,它有可能使用Java 8 lambda使这是一个单线程?
在使用情况下不敏感代码从here一行:
verify(mockAppendable)
.append(
argThat(arg ->
Pattern.compile(Pattern.quote(msg), Pattern.CASE_INSENSITIVE).matcher(arg).find()));
所以他们通过跳过指定自定义错误消息所允许的拉姆达版本。
并以“你可以提取的方法”,他们的意思是:
verify(mockAppendable).append(argThat(containsCaseInsensitive(msg)));
而且方法定义为:
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);
}
};
}
这是完全可重复使用的,你可以把一个新类里就像MocitoMatchers一样,并且可以像任何内置匹配器一样从许多测试中调用。
辉煌。非常感谢! –
你愿意看看我的版本“containsCaseInsensitive”吗?并可能编辑你的? (考虑到空参数略有更好的可读性)......我试图提交修改,但我搞砸了和第三方评审拒绝了... –
你的可能会更完整,但SO不在这里提供复制和粘贴,库质量代码。所有的无效检查和不同的信息都是人们可以选择添加的噪音,只要他们愿意并且不会对问题产生影响。 – weston
感谢JB Nizet我已经计算出的答案似乎是这样一类:
class ContainsThisIgnoringCase implements ArgumentMatcher<String> {
private String msg;
ContainsThisIgnoringCase(String msg){
this.msg = msg;
}
@Override
public boolean matches(String arg) {
return arg.toLowerCase().contains(msg.toLowerCase());
}
@Override
public String toString(){
return msg;
}
}
不过,我被迷惑的东西,然后我就the page到他的链接指向看:
一)他们怎么用“你可以提取方法”和
b)是有可能使用Java 8拉姆达使这一个班轮是什么意思?
使用argThat,例如:https://static.javadoc.io/org.mockito/mockito-core/2.7.5/org/mockito/ArgumentMatchers.html#argThat(org.mockito.ArgumentMatcher) –
谢谢。我想知道是否有可能做到这一点作为一个班轮,与Java 8拉姆达,按照这个页面,你的链接指向:https://static.javadoc.io/org.mockito/mockito-core/2.7 0.5 /组织/的Mockito/ArgumentMatcher.html –