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"))));//失败,无法正确断言!!
}
可是这样无法成功运行,报如下错误:
引用
java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V
at org.hamcrest.core.IsCollectionContaining.matchesSafely(IsCollectionContaining.java:31)
at org.hamcrest.core.IsCollectionContaining.matchesSafely(IsCollectionContaining.java:14)
at org.hamcrest.TypeSafeDiagnosingMatcher.matches(TypeSafeDiagnosingMatcher.java:55)
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:12)
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
at com.hsit.euler.eqengine.query.parser.impl.QueryParamParserImplTest.testNotSeniorQuery(QueryParamParserImplTest.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
at org.testng.internal.MethodInvocationHelper$1.runTestMethod(MethodInvocationHelper.java:200)
at org.unitils.UnitilsTestNG.run(UnitilsTestNG.java:103)
此路不通,我就试着换成如下方式:
@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很让人失望啊。不知列位有没有好的建议,非常感谢!
分享到:
相关推荐
SwiftHamcrest 是用 Swift 编写的 Hamcrest 测试断言。
hamcrest库Matcher库的简单示例 安装(Maven) 最新版本1,3:2012年7月 <groupId>org.hamcrest <artifactId>hamcrest-all <scope>test <version>1.3 没有依赖 匹配的演示文稿 第一次比赛 String s = "a ...
支持Junit测试,简单实用,只需要添加即可,hamcrest-library-1.3.jar包是hamcrest的核心包,这个jar包主要用于补充hamcrest core包中的断言,导入后就可以正常开发使用了,主要适用于eclipse中的JUnit4测试操作,...
放弃旧的断言,使用hamcrest断言 运行多个测试 注意 1. 遵守约定,比如: a) 类放在test包中 b) 类名用XXXTest结尾 c) 方法用testMethod命名
开发junit4所用到的3个jar包,可用最新断言assertThat,包括了hamcrest-core-1.3.0RC2.jar, hamcrest-library-1.3.0RC2.jar和 junit-4.8.1.jar三个jar包
迅捷的Hamcrest Hamcrest为您提供高级匹配器,并为您的Swift单元测试提供更好的错误消息。 Hamcrest最初是用Java编写的,可用于。教程该教程也可以作为Hamcrest工作区中的Playground使用。 通常,您在单元测试中使用...
assertThat断言语句 Marchers提供各种数值匹配方法、字符串匹配方法使用
junit-断言-比较junit 断言库的比较(assertj、hamcrest、fest、truth...)junit 断言库概述图书馆网站断言J 节 哈姆克雷斯特 真相 # 语法和失败消息比较简单等于图书馆句法失败信息朱尼特assertEquals(expected, ...
hamcrest-vs-assertj 断言库的一般优势 提高可读性 更好的失败信息 提供自定义匹配器 提供常见的断言模式 AssertJ 的优点 简单性和可用性 积极开发和社区驱动( ) 很多例子( ) 流利的api 高可读性 有意义的...
将一个Hamcrest断言添加到每个测试中,这些断言声明实际的结果对象图与预期的对象图匹配。 如果任何一个属性都不匹配,则断言将失败,并显示一条消息,使您可以轻松地确定对象图中哪个或哪些属性不匹配以及它们的...
shazamcrest, 适用于自动化测试的可以重用Hamcrest匹配器 Shazamcrest'Shazamcrest'是...通过serialising的实际和预期 bean,可以简化关于完整bean的断言,并将两者进行比较。 诊断程序正在利用ide的比较功能,比如 Ecl
hamcrest框架必须引入的包, 使用是导入包的方案:junit.jar + ...查看包中各类和文档后发现有些类(例如:断言is())同时出现在了org.hamcrest.Mathchers和org.hamcrest.core中,则在用到时候引入的时候需要注意。
Java UI自动化框架Java中带有Selenium和Hamcrest的UI自动化框架该项目是Java中的基本UI... 使用的工具是: 用TestNG写测试用例Selenium与Chrome浏览器进行交互Hamcrest写断言该项目包含页面对象模型(POM)设计模式。
此外,我们喜欢易于阅读和简洁的代码,其中方法名称已经嵌入了解释假设/断言所需的所有语义。 因此,在 Cirneco 中,我们旨在扩展最有价值的单元测试工具包,以提供更好的开发体验。 当前版本 ( Cirneco 2.0.0 ) 仅...
DBFlute Hamcrest 这是 DBFlute 的测试支持库,可帮助您从数据库中释放单元测试。 它提供 ConditionBean 匹配器、模拟行为的实用程序和一些 JUnit 帮助器。特征ConditionBean 匹配器断言查询条件 import static org....
在为响应编写断言时,我们使用Hamcrest匹配器。 朱尼特我们需要排除hamcrest-core依赖性,因为我们已经添加了hamcrest-all依赖性。 Mockito(mockito核心)。 我们使用Mockito作为我们的模拟库。 Spring测试...
对JUnit / Hamcrest / JUnitParams测试环境的有用补充。 您将大大减少大多数单元测试样板: 测试用例可以接收各种类型的参数,视需要而定。 测试断言几乎是完全人类可读的,从而为测试对象提供了自然的约束 ...
JavaHamcrest是一个专为单元测试设计的校验框架,其核心在于能够组合创建各类灵活的匹配器以进行断言。这个框架与JUnit集成使用,提供了诸如startsWith(字符串开头匹配)、containsString(是否包含指定字符串)和...
JUnit4视频教程及源码,由于文件较大,分割为JUnit_01.zip,JUnit_02.zip,JUnit_03.zip三个压缩包并附文档,下载后解压便可观看视频,导入代码,直接在自己的机器上运行
JUnit4视频教程及源码,由于文件较大,分割为JUnit_01.zip,JUnit_02.zip,JUnit_03.zip三个压缩包并附文档,下载后解压便可观看视频,导入代码,直接在自己的机器上运行