- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Unitils教程
Unitils教程
单元测试应该很容易,直观....至少在理论上是这样的。 然而现实的项目通常跨越多个层次,有的是数据驱动有的使用中间件技术,比如EJB和Hibernate等等。
Unitils源于尝试更加务实的单元测试,它始于一套测试准则,并为了方便应用这些准则而开发了一个开源代码库。
本教程将通过一些实例向您展示如何在您的项目中使用Unitils。
断言应用
数据库测试
应用Spring测试
应用mock objects测试
应用EasyMock支持
Assertion utilities 断言应用
首先以断言的应用来开始我们的教程,Unitils 提供的断言是可以独立应用在核心模块里不依赖其他模块的部分,不需要配置只要加入jar包并加入到classpath 里就可以使用。
应用反射的断言
典型的单体测试一般都包含一个重要的组成部分:对比实际产生的结果和希望的结果是否一致的方法:断言方法(assertEquals)。Unitils为我们提供了一个非常实用的assertion方法,让我们用比较两个USER对象的实例(User包括id ,first name ,last name属性)来开始我们这一部分的介绍。
public class User {
private long id;
private String first;
private String last;
public User(long id, String first, String last) {
this.id = id;
this.first = first;
this.last = last;
}
}
User user1 = new User(1, John, Doe);
User user2 = new User(1, John, Doe);
assertEquals(user1, user2);
因为两个user包含相同的属性,所以你一定以为断言是成功的。但是事实恰恰相反,断言失败,因为user类没有覆写equals()方法,所以断言就用判断两个对象是否相等来来返回结果,换句话说就是采用了user1 == user2的结果,用两个对象的引用是否一致作为判断的依据。
假如你像下面这样重写equals方法,
public boolean equals(Object object) {
if (object instanceof User) {
return id == ((User) object).id;
}
return false;
}
也许通过判断两个USER的ID是否相等来判断这两个user是否相等在您的程序逻辑里是行得通的,但是在单体测试里未必是有意义的,因为判断两个user是否相等被简化成了user的id是否相等了。
User user1 = new User(1, John, Doe);
User user2 = new User(1, Jane, Smith);
assertEquals(user1, user2); 按照上面的代码逻辑,也许断言成功了,但是这是您期望的么?所以最好避免使用equals()方法来实现两个对象的比较(除非对象的属性都是基本类型)。对了,还有一个办法也许能够有效,那就是把对象的属性一个一个的比较。
User user1 = new User(1, John, Doe);
User user2 = new User(1, John, Doe);
assertEquals(user1.getId(), user2.getId());
assertEquals(user1.getFirst(), user2.getFirst());
assertEquals(user1.getLast(), user2.getLast());
Unitils其实为我们提供了非常简单的方法,一种采用反射的方法。使用ReflectionAssert.assertReflectionEquals方法,上面的代码可以重写如下:
User user1 = new User(1, John, Doe);
User user2 = new User(1, John, Doe);
assertReflectionEquals(user1, user2);
这种断言采用反射机制,循环的比较两个对象的filed的值,比如上面的例子,它就是依次对比id,first,last的值是否相等。
如果某个filed本身就是object,那么断言会递归的依次比对这两个object的
文档评论(0)