2012-04-06 3 views
0

Я пишу простой тест, который проверяет метод, возвращающий некоторый интерфейс ниже Collection. Я стараюсь как можно больше абстрагировать внутреннее представление этой коллекции, чтобы этот тест прошел в обоих случаях: когда метод возвращает List и Set.Тестирование равенства коллекции с заказом

Предполагается, что Set (LinkedHashSet или LinkedHashMap поддержал Set), поэтому я должен проверить заказ. Так вообще-то я хотел бы написать тест, как это:

assertThat(returnedList, containsOrdered('t1", "t2", "t3")); 

, который подведет тогда и только тогда обе коллекции не является «тем же» (то есть один и тем же значением в том же упорядоченности).

Я нашел библиотеку Hamcrest полезной в этом случае, однако я застрял в ее документации. Любая помощь будет оценена, однако я постараюсь избежать написания CollectionTestUtil или моего собственного Hamcrest Matcher, если это возможно.

ответ

1

вы почти там.

assertThat(returnedList, contains("t1", "t2", "t3")) 

будет делать это. Сравнить с containsInAnyOrder.

+0

Не могли бы вы предоставить полный пакет и путь класса к этому методу? Вы используете assertThat от JUnit или от Hamcrest? Это какая-то разница? –

+0

У меня была неправильная версия библиотеки hamcrest, так как я тянул hamcrest-all зависимость. Я исправил его вместе с проблемами перекрытия junit (есть артефакт junit-dep, который не обеспечивает hamcrest, поэтому есть возможность добавить полную поддержку hamcrest). Спасибо за вашу помощь –

1

JUnit имеет org.junit.Assert, который содержит несколько assertArrayEquals -implementations для разных типов, так что вы могли бы сделать что-то вроде:

Collection<String> returnedList = new ArrayList<String>(); //Replace with call to whatever returns the ordered collection  
    Assert.assertArrayEquals(new Object[]{"t1", "t2", "t3"}, returnedList.toArray()); 
+0

Да, это альтернатива, которую я рассматривал (сравнивая массивы вместо коллекций), я пошел бы так, если другой не сработает. –

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

  • Нет связанных вопросов^_^