2015-06-16 76 views
0

我要創建一組擁有模擬的Java objects.Like以下如何將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來,踩滅私人最終方法。

我怎樣才能擁有一個擁有不同模擬對象的集合?

+0

我試過了...對我來說它輸出'3'...順便說一句。您可以將具有相同哈希碼的不同對象放入哈希集合中......關於equals()方法,這些對象並不相同。 –

+0

請分享整個代碼(MyObject) –

+1

@Andre R你是對的。 MyObject類擴展了一個正在使用的抽象類,正在重寫哈希碼(我沒有意識到它)。感謝您的想法。 –

回答

0

您可以使用IdentityHashMap類而不是HashSet。它使用引用比較而不是equals方法,因此具有不同地址的對象將不會被該類視爲相同。