如何将java模拟对象添加到hashset?

时间:2015-06-16 14:57:34

标签: mockito

我想创建一个包含模拟java对象的集合。如下所示

MyObject objectA = mock(MyObject.class);
when(objectA.getName()).thenReturn("nameA");

MyObject objectB = mock(MyObject.class);
when(objectB.getName()).thenReturn("nameB");

MyObject objectC = mock(MyObject.class);
when(objectC.getName()).thenReturn("nameC");

Set<MyObject> mySet = new HashSet<>();
mySet.add(objectA);
mySet.add(objectB);
mySet.add(objectC);
mySet.size();// this will be "1" instead of "3"

我希望套装的大小为“3”而不是“1”。

我知道在添加对象时设置它会验证对象的哈希码。在这种情况下,我的所有模拟对象都具有相同的哈希码,因此该集合只能保存一个值。

我也试过以下

int someRandomInt = 12345;
when(objectA.hashCode()).thenReturn(someRandomInt):

但Mockito未能找出私人最终方法。

如何拥有一个包含不同模拟对象的集合?

1 个答案:

答案 0 :(得分:0)

您可以使用IdentityHashMap类而不是HashSet。它使用引用比较而不是equals方法,因此具有不同地址的对象不会被此类视为相等。