锁定老帖子 主题:推荐升级easymock到新的3.0版本
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-26
这也就算了,最要命的地方是,easyMock和easyMock class extension在使用时,class名是相同的,只是package不同。这会导致一个非常令人抓狂的问题:如果在同一个测试类中,需要同时使用interface mock和class mock,就必须同时使用org.easymock.EasyMock和org.easymock.classextension.EasyMock,由于java import只能import一个,因此另外一个就必须使用全限定名,如: import org.easymock.EasyMock; ... Easymock.createMock(...); org.easymock.classextension.EasyMock.createMock(...); 编码的时候稍有不慎就搞错,代码难写而且难看。很明显,这是一个没有必要的设计,因为使用者通常并不关心mock的是interface还是class。 近日得知easymock已经发布了新的3.0版本,该版本的主要改进就是消除上述的问题,新版本中可以直接mock class,不再强制使用easyMock class extension。 以下是easymock官网 http://easymock.org/ 的发布信息: 010-05-08: EasyMock 3.0 is available. Perform class mocking directly. EasyMock 1 classes removed. 2010-05-08: EasyMock 3.0 Class Extension is available. Now deprecated. Only a proxy over EasyMock to provide backward compatibility. 可以看到为了兼容2.*版本的就有代码,3.0之中还是发布了Class Extension版本,作为旧有的2.*代码和新的3.0之间的代理。不过明确标记为"deprecated"了。 试用了一下,新的3.0版本中,直接使用org.easymock.EasyMock,可以在同一个case中同时混合mock interface和class,使用方式和以往相同。恩,明显感觉使用方便了许多。 顺便做了一下兼容性测试,针对旧有的使用2.*版本的class mock的测试案例,尝试使用两种方法: 1. 不修改原有代码,使用3.0的class extension来保持兼容 代码编译通过,测试案例正常运行。 这个方案适合项目较大时先整体升级,保证测试案例可以运行,后续再逐步转移到3.0版本。 2. 修改原有代码,不再使用class extension 代码只需一个改动,即将原有的org.easymock.classextension.EasyMock 修改为org.easymock.EasyMock,通常只要简单修订import即可。eclispe下简单ctrl +shit + o一招即可搞定。 两个方法组合使用,就可以平稳的将原有的2.*的测试案例转移到新的3.0版本中。 强烈推荐还在使用easymock 2.*的朋友们升级到3.0版本。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-06-28
推荐mockito
|
|
返回顶楼 | |
发表时间:2010-06-28
daquan198163 写道 推荐mockito
推荐的理由是什么?能简单说一下吗?mockito我还没有接触过,不大清楚。 我们这边在用jmockit,来解决一些easymock无法做到的问题,比如模拟静态方法。 这里有一个jmockit给出来的特性对比列表,mockito也在其中。 http://code.google.com/p/jmockit/wiki/MockingToolkitComparisonMatrix 当然这个是jmockit给出来的,可能不是很公正。不过大体上看,jmockit还是很强大的。 |
|
返回顶楼 | |
发表时间:2010-06-29
最后修改:2010-06-29
skydream 写道 daquan198163 写道 推荐mockito
推荐的理由是什么?能简单说一下吗?mockito我还没有接触过,不大清楚。 我们这边在用jmockit,来解决一些easymock无法做到的问题,比如模拟静态方法。 这里有一个jmockit给出来的特性对比列表,mockito也在其中。 http://code.google.com/p/jmockit/wiki/MockingToolkitComparisonMatrix 当然这个是jmockit给出来的,可能不是很公正。不过大体上看,jmockit还是很强大的。 因为mockito完全可以代替easymock,而且语法简单,功能更强,所以推荐。 jmockit我都没听说过,哈哈,看那个比较貌似jmockit更强,比如可以mock静态方法。 另外,你们为何结合使用两个mock框架,只用jmockit一个不可以么? 像我现在就是完全用mockito代替easymock了 mockito的优点很多,比较有特色的是这两个: Argument matchers Sometimes, when extra flexibility is required then you might use argument matchers: //stubbing using built-in anyInt() argument matcher when(mockedList.get(anyInt())).thenReturn("element"); Stubbing consecutive calls (iterator-style stubbing) Sometimes we need to stub with different return value/exception for the same method call. Typical use case could be mocking iterators. Original version of Mockito did not have this feature to promote simple mocking. For example, instead of iterators one could use Iterable or simply collections. Those offer natural ways of stubbing (e.g. using real collections). In rare scenarios stubbing consecutive calls could be useful, though: when(mock.someMethod("some arg")) .thenThrow(new RuntimeException()) .thenReturn("foo"); //First call: throws runtime exception: mock.someMethod("some arg"); //Second call: prints "foo" System.out.println(mock.someMethod("some arg")); //Any consecutive call: prints "foo" as well (last stubbing wins). System.out.println(mock.someMethod("some arg")); Alternative, shorter version of consecutive stubbing: when(mock.someMethod("some arg")) .thenReturn("one", "two", "three"); http://mockito.googlecode.com/svn/tags/latest/javadoc/org/mockito/Mockito.html |
|
返回顶楼 | |
发表时间:2010-06-30
daquan198163 写道 另外,你们为何结合使用两个mock框架,只用jmockit一个不可以么? 像我现在就是完全用mockito代替easymock了 这个我还真不大清楚,稍后再问问同事。我加入前就是easymock + jmockit了。 惭愧的说在此之前我还真不知道jmockit的存在,也不知道原来static方法也是可以mock的。 我猜测啊,可能是开始用easymock,后来发现有些地方easymock搞不定,因此作为补充引入的jmockit。从我看到的测试代码上看,jmockit目前都是在这些对于easymock来说比较难受的地方在使用。jmockit 自己的expection, verification好像没有看到。 正在研究jmockit中,上面引用的那个特性列表,哎,不能不再此惭愧一下,很多特性我都是不知道它的存在的,等稍后仔细过一遍在说。 |
|
返回顶楼 | |
发表时间:2010-07-05
几年前用过easymock,现在项目中基本没有单元测试。有,顶多也是写个main方法跑一把。
|
|
返回顶楼 | |
发表时间:2010-07-06
ilove2009 写道 几年前用过easymock,现在项目中基本没有单元测试。有,顶多也是写个main方法跑一把。
这个,未免强大了点,你们是怎么保证代码质量的? |
|
返回顶楼 | |
发表时间:2010-07-06
skydream 写道 ilove2009 写道 几年前用过easymock,现在项目中基本没有单元测试。有,顶多也是写个main方法跑一把。
这个,未免强大了点,你们是怎么保证代码质量的? 传说中的单元测试无用论,直接集成测试。。。 |
|
返回顶楼 | |
发表时间:2010-07-07
archerfrank 写道 skydream 写道 ilove2009 写道 几年前用过easymock,现在项目中基本没有单元测试。有,顶多也是写个main方法跑一把。
这个,未免强大了点,你们是怎么保证代码质量的? 传说中的单元测试无用论,直接集成测试。。。 我们是分层开发的,基本上算是集成测试吧。目前还不知道有那些技术能给B/S结构的做完整的单元测试。 |
|
返回顶楼 | |
发表时间:2010-07-07
ilove2009 写道 archerfrank 写道 skydream 写道 ilove2009 写道 几年前用过easymock,现在项目中基本没有单元测试。有,顶多也是写个main方法跑一把。
这个,未免强大了点,你们是怎么保证代码质量的? 传说中的单元测试无用论,直接集成测试。。。 我们是分层开发的,基本上算是集成测试吧。目前还不知道有那些技术能给B/S结构的做完整的单元测试。 给B/S结构的做完整的单元测试确实不容易,不过即使抛开B不谈,你的S端总的有单元测试吧? s端的业务逻辑,实现逻辑这些都是可以用单元测试来保证质量的,我相信你们的s端怎么也不至于简单到只要得到两个参数a,b,然后直接return (a + B)这么简单吧? |
|
返回顶楼 | |