1

mockito verify 方法是否匹配集合的相同实例,或者它是否验证集合的元素?如果我在 Page#equals() 方法上设置一个断点,它不会被触发。只有 Page#hashCode() 可以。知道为什么 Mockito 在具有相同元素时不认为 Set 的 2 个实现是相等的吗?

Set<Page> pagesToRemove = Sets.newHashSet();
// add a few pages
Set<Page> copy = ImmutableSet.copyOf(pagesToRemove)
pageManager.removePages(copy);
verify(pageManager, new Times(1)).removePages(pagesToRemove);

Page 上的 Equals 和 HashCodes 方法具有继承自 Object 的默认实现。

论据不同!通缉:pageManager.removePages( (HashSet) [{ pageId : null; parentId : null; firstChild : null; nextSibling : null }, etc...] ); -> at com.fg.edee.integration.service.PageServiceTest.testRemove(PageServiceTest.java:60) 实际调用有不同的参数: pageManager.removePages( (RegularImmutableSet) [{ pageId : null; parentId : null; firstChild : null; nextSibling : null } 等..] );

4

2 回答 2

0

我写了一些测试,发现它只是一个 HashSet hashCode 的东西。正如我所说,我使用的是本机 Object#hashCode 和:

一个关键限制是在标准 Java 实现中,哈希码不能唯一地标识一个对象。它们只是缩小了匹配项的选择范围,但预计在正常使用中,几个对象很有可能共享相同的哈希码。

这是相当误导的,因为本机 Object#hachCode() 方法在执行过程中总是返回相同的整数。

于 2013-01-07T08:26:36.083 回答
0

在验证使用引用类型对象作为参数调用的方法时,可以使用 ArgumentMatcher。见这里

于 2013-01-07T09:04:47.293 回答