Hamcrest: при сбое iterableWithSize выдает неверное сообщение, например «got: com.xxx.MyIterClass$1@1970ae0» - PullRequest
0 голосов
/ 16 марта 2012

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

У меня есть (расширение) Iterator, параметризованное Content, напримерэто

EndResult<Content> contents = contentRepository.findAllByPropertyValue("title", "*");

, где EndResult - это

пакет org.springframework.data.neo4j.conversion;открытый интерфейс EndResult расширяет Iterable {...}

и Content является @NodeEntity Pojo.

С помощью Марк Петерс I научилсячто я должен называть это так:

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

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

Но при запуске теста я получаю

java.lang.AssertionError: Expected: 
an iterable with size <2> 
got: org.springframework.data.neo4j.conversion.QueryResultBuilder$1@1970ae0

Пытаясь выяснить, 1) делаю ли я что-то не так, или 2) подколенный или 3) Spring Data Neo4jесть ошибка, я проверил свой объект под рукой, и он выглядит нормально как Iterable:

 public static int iterSize(Iterator iter){     
    int i=0;                        
    while (iter.hasNext()){ i++;iter.next();}                       
    return i; 
 }
 public static int iterSize(Iterable iter) {return iterSize(iter.iterator());}

 assertEquals("contents contain 2 items", 2, iterSize(contents)); // works OK

Так что я предполагаю, что он, возможно, приходит к выводу, что у его подколенного сухожилия есть проблема.Кто-нибудь пробовал что-нибудь подобное с IsIterableWithSize?

Тестовый код https://github.com/anodynos/SpringDataNeo4jTrials/blob/master/src/test/java/sdnTests/test/HamcrestIteratorSizeTest.java

1 Ответ

1 голос
/ 07 августа 2013

Вы видите это менее полезное сообщение, потому что вы используете версию assertThat от JUnit. Если вы используете assertThat, поставляемый с подколенным сухожилием, он может лучше описать несоответствие.

Заменить

import static org.junit.Assert.assertThat;

с

import static org.hamcrest.MatcherAssert.assertThat;
...