首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

关于hamcrest预言的不足

2013-12-07 
关于hamcrest断言的不足hamcrest断言提供了很多好用的断言表达式,参见http://0411.iteye.com/blog/1048303

关于hamcrest断言的不足
hamcrest断言提供了很多好用的断言表达式,参见http://0411.iteye.com/blog/1048303

我最感兴趣的是对集合中Bean属性的断言,相信这也是最具实用的断言,可见hamcrest偏偏在这方面做得很弱啊,以下是我的一断测试代码:

    @Test    public void testNotSeniorQuery() throws Exception {        List<ParsedQueryParam> parsedQueryParams = queryParamParser.parse(request);        assertThat(parsedQueryParams, notNullValue());        assertThat(parsedQueryParams, hasSize(6));        assertThat(parsedQueryParams,                   hasItem(hasProperty("aaa",is("a"))));    }


  以上代码直接通不过编译,具体解决方法参见:
https://weblogs.java.net/blog/johnsmart/archive/2008/04/on_the_subtle_u.html
  也即,以上测试代码必须改成:
    @Test    public void testNotSeniorQuery() throws Exception {        List parsedQueryParams = queryParamParser.parse(request);//这儿直接用List        assertThat(parsedQueryParams, notNullValue());        assertThat(parsedQueryParams, hasSize(6));        assertThat((List<Object>)parsedQueryParams,  //这儿将List cast 为List<Object>                   hasItem(hasProperty("aaa",is("a"))));    }


   虽然这样可以通过编译了,但是我还有更多类似于以下的断言集合中Bean级联属性的需求:
即ParsedQueryParam类包含了一个QueryParam,QueryParam中拥有paramName及paramValue属性,我希望hamcrest能够支持以下的代码:
    @Test    public void testNotSeniorQuery() throws Exception {        List parsedQueryParams = queryParamParser.parse(request);        assertThat(parsedQueryParams, notNullValue());        assertThat(parsedQueryParams, hasSize(6));        assertThat((List<Object>)parsedQueryParams,                hasItem(hasProperty("queryParam.paramName",is("userId1"))));//失败,无法正确断言!!    }


   可是这样无法成功运行,报如下错误:
@Test public void testNotSeniorQuery() throws Exception { List parsedQueryParams = queryParamParser.parse(request); assertThat(parsedQueryParams, notNullValue()); assertThat(parsedQueryParams, hasSize(6)); assertThat((List<Object>)parsedQueryParams, hasItem(hasProperty("queryParam",hasProperty("paramName"))));//这样可以成功断言! }
   但是以上断言只是断言属性的存在性,如果我断言属性值,即又歇菜了!
    @Test    public void testNotSeniorQuery() throws Exception {        List parsedQueryParams = queryParamParser.parse(request);        assertThat(parsedQueryParams, notNullValue());        assertThat(parsedQueryParams, hasSize(6));        assertThat((List<Object>)parsedQueryParams,                hasItem(hasProperty("queryParam",hasProperty("paramName",is("userId1")))));//NND 这样不行!    }


   一直想找一个可以很好对集合中Bean进行存在性断言或Bean属性值断言的框架,发现hamcrest很让人失望啊。不知列位有没有好的建议,非常感谢!

热点排行