0

hamcrest (1.3.RC2、JUnit 依存関係なし) で、SpringDataNeo4j ライブラリで iterableWithSize() を使用すると失敗します。

私はこのようにIteratorパラメータ化された(の拡張)を持っていますContent

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

どこEndResultですか

パッケージ org.springframework.data.neo4j.conversion; public インターフェイス EndResult extends Iterable {...}

そしてContentaa @NodeEntityPojoです。

Mark Petersの助けを借りて、私はこのように呼ぶべきであることを学びました

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

なぜなら、 iterable 自体の具象型ではなく、iterableWithSizeあなたのコンポーネント型に型付けされているからです。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 のバージョンの を使用しているため、このあまり役に立たないメッセージが表示されますassertThatassertThathamcrest に付属の を使用すると、ミスマッチをより適切に説明できます。

交換

import static org.junit.Assert.assertThat;

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