2016-11-28 46 views
0

我有一個Java對象,其中包含另一個java對象,它是一個集合。例如:Java集測試

Public States { 
     private Set<City> cities = new HashSet(0); 
     // Setters and Getters Here 
     } 

Public City { 
     private String dummyValue; 
     // Setters and Getters Here 
     } 

我想測試此對象以確保它包含我已在方法中修改過的值。例如,我試圖:

Set<City> citySet = citySetInfoFromAnotherMethod; 
assert citySet.iterator().next().equals("Dallas"); 

但是我知道這是行不通的,因爲一個Set沒有列表這樣的順序。

所以最後,我可以測試這個對象,看看在我做些什麼之後,另一個方法分配給它的值是什麼。

+0

是的。不要使用一套。 – DejaVuSansMono

+0

有點不清楚,你想測試Set的_some_第一個元素嗎?或者該集合包含什麼?您想做什麼? – Tunaki

+0

我想測試集合中的dummyValue等於某事,例如「Dallas」 – DevelopingDeveloper

回答

2

您可以使用優秀的Hamcrest匹配器庫來實現您想要的內容(它內置了早期版本的JUnit,但不包含更高版本)。

你想要做的事,如:

Set<City> citySet = citySetInfoFromAnotherMethod; 
assertThat(citySet, contains("Dallas")); 

當然,這是行不通的,因爲你的設置項有一個City對象,而不是String,但你可以使用更多的Hamcrest匹配器來實現這一目標太!

Set<City> citySet = citySetInfoFromAnotherMethod; 
assertThat(citySet, contains(hasProperty("Name", eq("Dallas")))); 

或者(和恕我直言更好)的方法是使用Hamcrest屬性匹配器提取城市名稱。