Недавно я использовал библиотеку Hamcrest для написания тестов и довольно успешную, но теперь мне нужно сделать что-то более сложное и начать видеть много трудностей. Мне нужно inpsect и проверить свойства элементов на карте. Мой производственный код выглядит примерно так:
Map<String, List<MyItem>> map = new HashMap<String, List<MyItem>>();
map.put("one", Arrays.asList(new MyItem("One")));
map.put("two", Arrays.asList(new MyItem("Two")));
map.put("three", Arrays.asList(new MyItem("Three")));
Я хочу написать несколько тестовых кодов, подобных следующим, но он не компилируется. Похоже, что Hamcrest hasEntry имеет параметризацию по типу, а hasItem и hasProperty только ожидают Object.
assertThat(map, Matchers.<String, List<MyItem>>hasEntry("one", hasItem(hasProperty("name", is("One")))));
В моей среде IDE (Eclipse) появляется следующее сообщение об ошибке: Параметрированный метод <String, List<HamcrestTest.MyItem>>hasEntry(String, List<HamcrestTest.MyItem>) типа Matchers неприменим для аргументов (String, Matcher<Iterable<? super Object>>). С одной стороны, я думаю, что Eclipse запутался в том, какой метод hasEntry я хотел использовать, он должен быть hasEntry(org.hamcrest.Matcher<? super K> keyMatcher, org.hamcrest.Matcher<? super V> valueMatcher), а не hasEntry(K key, V value).
Должен ли я просто сдаться и получить предмет с Карты и вручную проверить каждое свойство? Есть ли более чистый способ?