【发布时间】:2013-01-07 07:41:31
【问题描述】:
mockito 验证方法是匹配集合的相同实例还是验证集合的元素? 如果我在 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;父母身份:空;第一个孩子:空; nextSibling : null } 等...] ); -> 在 com.fg.edee.integration.service.PageServiceTest.testRemove(PageServiceTest.java:60) 实际调用有不同的参数: pageManager.removePages( (RegularImmutableSet) [{ pageId : null;父母身份:空;第一个孩子:空; nextSibling : null }, etc..] );
【问题讨论】:
-
我相信 Mockito 只是使用 equals 来检查是否相等。你可以尝试做类似
assertEquals(pagesToRemove, copy)的事情来看看它是否有效?