2012-03-14 2 views
6

В Hamcrest (1.3.RC2, без зависимостей JUnit) Я уверен, не используя iterableWithSize().Hamcrest дженерики ад # 2: iterableWithSize дает errror «не применяется для аргументов»

У меня есть (продолжение) 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, Сличитель) в типе Утверждай не применяется для аргументов (EndResult < Content>, Сличитель < < Iterable Object >>)

Я также попробовал эти неудачи:

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 для коллекций работ, как и ожидалось, но для итераторов я могу даже найти рабочий пример ...

ответ

13

Должно быть только

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

iterableWithSize напечатан на компоненте вашего Iterable, а не конкретном типе итерации.

+0

Спасибо Марку - действительно компилировать время его хорошо, но когда тест запускается я получаю java.lang.AssertionError: Ожидаемое: итератор с размером <2> получил:

+0

@Agelos: Тогда, я думаю, вам лучше исправить либо ваш код, либо ваш тест! Я отвечал на вопрос Хамкреста, у вас есть неправильное предположение или какой-то код нарушен. Извините, но я не знаю достаточно о Весне, чтобы ответить на новый вопрос. –

+0

Но так как EndResult расширяет Iterable , что еще может быть неправильным в тривиальном {next(); i ++} коде? –