2010-06-19 5 views
2

Хорошо, часто у меня будет метод, который возвращает набор какого-то рода. Проблема с модульным тестированием такого метода заключается в том, что нет гарантии, что итерация по набору всегда будет возвращать элементы в том же порядке.Каков наилучший способ проверки значений набора в единичном тесте?

Есть ли у кого-нибудь какой-либо предпочтительный метод проверки набора?

Питер

ответ

2

Просто поместите ваши ожидаемые значения в наборе и затем используйте assertEquals для ожидаемого и фактического набора. Это работает шармом, например.

Set<String> expected = new HashSet<String>(Arrays.asList("expected", "items")); 
... 
Set<String> actual = ...; 
Assert.assertEquals(expected, actual); 
+0

Эй, да. Я не знал, что ты можешь это сделать. Из Java 6 AbstractSet javadocs: – Risser

+0

Сравнивает указанный объект с этим набором для равенства. Возвращает true, если данный объект также является множеством, два набора имеют одинаковый размер, и каждый член данного набора содержится в этом наборе. Это гарантирует, что метод equals корректно работает в разных реализациях интерфейса Set. Эта реализация сначала проверяет, установлен ли указанный объект; если он возвращает true. Затем он проверяет, является ли указанный объект набором, размер которого совпадает с размером этого набора; если нет, он возвращает false. Если это так, он возвращает containsAll ((Collection) o). – Risser

+0

containsAll использует содержит и содержит использует метод .equals. Для наборов простых pojos или всего, что имеет хороший метод .equals, это довольно изящно. Благодаря! – Risser

0

Два множества равны, то есть они содержат одни и те же элементы, если они оба содержат один другой

Assert.assertTrue(s1.containsAll(s2) && s2.containsAll(s1)) 

Там также SetUtils.isEqualSet

Смежные вопросы