Hamcrest: when iterableWithSize fails, it gives a bad message like “got: com.xxx.MyIterClass$1@1970ae0”

我的未来我决定 提交于 2019-12-13 05:43:27

问题


In hamcrest (1.3.RC2, with no JUnit dependencies) I am failing using iterableWithSize() with a SpringDataNeo4j library.

I have an (extension of) an Iterator parameterized with Content like this

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

where EndResult is

package org.springframework.data.neo4j.conversion; public interface EndResult extends Iterable {...}

and Content is a a @NodeEntity Pojo.

With the help of Mark Peters I learned that I should call it like this

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

since iterableWithSize is typed on the component type of your Iterable, not the concrete type of iterable itself.

But when test is run I get

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

Trying to figure out whether either 1) I am doing some thing wrong, or 2) hamcrest or 3) Spring Data Neo4j has an bug, I checked my object at hand, and it seems OK as an 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

So I guess it possibly concludes that its hamcrest that has a problem. Has anyone tried anything similar with IsIterableWithSize ?

The test code is https://github.com/anodynos/SpringDataNeo4jTrials/blob/master/src/test/java/sdnTests/test/HamcrestIteratorSizeTest.java


回答1:


You are seeing this less helpful message because you are using JUnit's version of assertThat. If you use the assertThat provided with hamcrest it is able to better describe the mismatch.

Replace

import static org.junit.Assert.assertThat;

with

import static org.hamcrest.MatcherAssert.assertThat;


来源:https://stackoverflow.com/questions/9727711/hamcrest-when-iterablewithsize-fails-it-gives-a-bad-message-like-got-com-xxx

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!