Я недавно использовал библиотеку Hamcrest, чтобы написать несколько тестов и довольно успешно, но теперь мне нужно сделать что-то более сложное и начать видеть много трудностей. Мне нужно inpsect и проверить свойства элементов на карте. Мой производственный код выглядит примерно так:Как использовать Hamcrest для проверки элементов карты
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")));
Я хочу написать несколько тестовых кодов, как показано ниже, но он не компилируется. Похоже, что hascrnt от Hamcrest имеет параметризацию по типу, а 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)
.
Должен ли я просто сдаться и получить предмет с Карты и вручную проверить каждую собственность? Есть ли более чистый способ?
Я не считаю, что это будет устранить ошибку времени компиляции, потому что 'hasEntry' возвращает' Сличитель> 'вместо требуемого' Matcher > ' –
@JohnB: Верьте или нет, но я попробовал, и это работает просто персиковый для меня. – t0mppa
Может плохо. Хороший звонок. –