0

在 hamcrest(1.3.RC2,没有 JUnit 依赖项)中,我无法将 iterableWithSize() 与 SpringDataNeo4j 库一起使用。

我有一个像这样Iterator参数化的(扩展)Content

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

EndResult在哪里

包 org.springframework.data.neo4j.conversion;公共接口 EndResult 扩展 Iterable {...}

并且Content是一个@NodeEntityPojo。

在马克彼得斯的帮助下,我知道我应该这样称呼它

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

因为iterableWithSize是在 your 的组件类型上键入的Iterable,而不是在 iterable 本身的具体类型上键入的。

但是当测试运行时我得到

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

试图弄清楚 1) 我做错了什么,或者 2) hamcrest 或 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

4

1 回答 1

1

您看到这条不太有用的消息是因为您使用的是 JUnit 的assertThat. 如果您使用assertThathamcrest 提供的,它能够更好地描述不匹配。

代替

import static org.junit.Assert.assertThat;

import static org.hamcrest.MatcherAssert.assertThat;
于 2013-08-07T12:30:17.970 回答