Обобщения Hamcrest, ад №2: iterableWithSize выдает ошибку «неприменимо для аргументов» - PullRequest
6 голосов
/ 14 марта 2012

В Hamcrest (1.3.RC2, без JUnit-зависимостей) я не могу использовать iterableWithSize().

У меня есть (расширение) Iterator, параметризованное Content, как это EndResult<Content> contents = contentRepository.findAllByPropertyValue("title", "*content*");

, где EndResult - это package org.springframework.data.neo4j.conversion; public interface EndResult<R> extends Iterable<R> {...}, а Content - это мое Pojo.

Теперь я думаю, что это будет работать assertThat(contents, iterableWithSize(1));

, новыдает ошибку: Метод assertThat (T, Matcher) в типе Assert не применим для аргументов (EndResult , Matcher >)

Я также попробовал эти ошибки:

assertThat(contents, iterableWithSize(equalTo(1));

assertThat(contents, IsIterableWithSize.<EndResult<Content>>.iterableWithSize(1));

Это мой импорт:


    import static org.hamcrest.CoreMatchers.equalTo;
    import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
    import static org.hamcrest.collection.IsIterableWithSize.iterableWithSize;
    import static org.junit.Assert.assertEquals;
    import static org.junit.Assert.assertThat;
    import org.hamcrest.collection.IsIterableWithSize;

hasSize для коллекций работает какожидается, но для итераторов я не могу даже найти рабочий пример ...

1 Ответ

13 голосов
/ 14 марта 2012

Это должно быть просто

assertThat(contents, IsIterableWithSize.<Content>iterableWithSize(1));

iterableWithSize набирается для типа компонента вашего Iterable, а не для конкретного типа итерируемого.

...