2016-11-28 54 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属性匹配器提取城市名称。