【发布时间】:2015-06-30 05:51:49
【问题描述】:
when(validator.isValid(Sets.newHashSet("valid"))).thenReturn(true);
当validator.isValid(set) 被调用时,它返回false。这是因为验证器实现创建了一个新集合,它与传递的集合不同(引用不同) - 两个集合中的项目相同。
如果集合包含相同的项目,无论集合实例如何,我都需要返回 true。
类似org.mockito.Matchers的东西:
public static <T> Set<T> anySetOf(Class<T> clazz) {
return (Set) reportMatcher(Any.ANY).returnSet();
}
除了我传递的实例不是Class<T>.class。
verify 也一样:
verify(validator, times(1)).isValid(Sets.newHashSet("valid"));
有这样的匹配器吗?
【问题讨论】:
-
这是不正确的。如果该方法返回 true 而不是 false,则仅表示实际集合不等于(由 Set.equals() 定义)与
Sets.newHashSet("valid")。它内部有更多或更少或不同的元素。所以你不需要任何匹配器。没有匹配器,或者如果集合实际上等于Sets.newHashSet("valid"),则 eq() 匹配器会很好。