Fel*_*lix 5 java set matcher mockito
when(validator.isValid(Sets.newHashSet("valid"))).thenReturn(true);
Run Code Online (Sandbox Code Playgroud)
当validator.isValid(set)被调用时它返回false。这是因为验证器实现创建了一个与传递的不同的新集合(引用不同)——两个集合中的项目是相同的。
如果集合包含相同的项目,无论集合实例如何,我都需要返回true。
类似于org.mockito.Matchers:
public static <T> Set<T> anySetOf(Class<T> clazz) {
return (Set) reportMatcher(Any.ANY).returnSet();
}
Run Code Online (Sandbox Code Playgroud)
除了我不会通过实例之外Class<T>.class。
和同样的verify:
verify(validator, times(1)).isValid(Sets.newHashSet("valid"));
Run Code Online (Sandbox Code Playgroud)
有这样的匹配器吗?
显然 JB Nizet 是对的。不需要特定的匹配器。
我尝试使用我自己的匹配器,然后在删除后它也有效:
public static class SetItemMatcher extends ArgumentMatcher<Set<String>> {
public static Set<String> setOf(Set<String> items) {
return argThat(new SetItemMatcher(items));
}
private final Set<String> expected;
public SetItemMatcher(Set<String> expected) {
this.expected = expected;
}
@Override
public boolean matches(Object argument) {
Set<?> actual = (Set<?>) argument;
return actual.size() == expected.size() && containsAllItems(actual);
}
private boolean containsAllItems(Set<?> actual) {
for (Object o : actual) {
if (!expected.contains(o)) {
return false;
}
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3932 次 |
| 最近记录: |