●请申请链接的朋友帮我也做好链接!本站转载他站文章将会注明来源,如果发现未注明或者出处有误,请联系我修改。
●需要gmail的朋友请在留言本留言。
●gold will shining at last, and I will fly, Gook luck for myself.
●小日本看清楚:钓鱼岛从来就是中国的领土!

谈Groovy为Java做单元测试

[晴 2008/09/08 15:57 | by xeric ]
最近看到有人在Infoq写了用Jruby为Java写测试用例,
感觉不错,脚本语言的简便性得以充分发挥,于是不免手痒,尝试了一下,
Jruby虽好,却发现需要进行编译时出来诸多问题,比如java代码必须放入jruby的libpath下,
虽然不是什么大事,却无形中增加了推广难度,大家肯定会排斥做测试还需要这么麻烦的操作。
当然不是没有办法,不过似乎看上去很美的东西总是存在缺憾。
这个和Jruby不是Java原生支持的脚本有一定关系,于是想到了Groovy。
果然,尝试了一下Groovy后,发现其集成度远优于Jruby,
很简单的调用IDE中部署好的java类,无需任额外配置就可以run起来。
于是感觉找到了新路可走,深入挖掘,
单元测试最繁琐的事情当然属mock对象,一个代码中充斥了各种依赖的类,
这些类在正常的运行中又依赖于其他类和诸多环境变量和配置。
当然Groovy是个不错的语言,对于Junit的支持非常优秀,提供了MockFor和StubFor的方法来处理mock。
简单易懂,不过随着测试代码烦琐的深入,问题逐渐出现了。
我需要测试的一个业务类中,调用了一个读取配置的Util,
当然,除非我的运行环境全部run起来才有可能读取到这个配置,否则是读取不了的。
就是以为着我要mock这个读取配置的Util。
这个是个很典型的Groovy范例,我当时看了doc后是这样想的。
然而事实却远比我想象残酷,在我找遍了所有资料,尝试了n种做法后,
突然发现一个严重的问题,所有的例子里,你要mock的对象需要生效,比如是在groovy的脚本中才可以,
换句话说,我mock了一个util类,是的,我确实成功了,我在下面代码总这样使用

import groovy.mock.interceptor.MockFor
class JavaGroovyTest extends GroovyTestCase{
 void firstTest(){
   def mock = new MockFor(JavaUtil)
   mock.demand.returnValue(1..2){false}//before mock, this return true
   mock.use{
     println(JavaUtil.retrunValue())
   }
 }
}

如我所料的返回了false,然而当这个util被包含在一个java类写的业务逻辑总,严重问题出现了,
groovy的mock无法使作用域进入class。

//java class, this is java code!
public class JavaClass
{
   public boolean doReturnValue(){
       return JavaUtil.returnValue();
   }
}


import groovy.mock.interceptor.MockFor
class JavaGroovyTest extends GroovyTestCase{
 void firstTest(){
   def mock = new MockFor(JavaUtil)
   mock.demand.returnValue(1..2){false}//before mock, this return true
   mock.use{
     def jc = new JavaClass()
     println(jc.doReturnValue())
   }
 }
}

返回的值依旧是true,而且抛出一个异常:
junit.framework.AssertionFailedError: verify[0]: expected 1..2 call(s) to 'returnValue' but was called 0 time(s).
开始还没理解这个错误究竟怎么回事,后来发现,由于所调用的returnValue是在java的class中,
对于这个测试用例来说,根本就没有调到mock出来的returnValue方法,而这个方法要求至少被执行1-2次,
这个执行操作没有发生,因此就抛出了这个错。
如果mock根本就无法介入java的class,那么意味着使用Groovy的纯粹性大大下降,
我们写测试的话,必须把java和groovy混着写才行,我想没有一个公司的代码管理者希望看到这样的情况。
不知道有没有其他办法来解决这个问题,我暂时是没辙了,
感觉上想让脚本进入项目还有点时间。
Tags: ,

最近又迷上seam了

[阴 2008/08/07 11:26 | by xeric ]
真是佩服自己的杂食能力,
又要新开辟一块战场了,不过整体来说还是对于快速开发和敏捷编程的喜爱。
不过seam有一点让我不是很喜欢,前端用的是JSF。
不知道是不是web bean在jsf里面运作的更好才这样选择的。
我是不太喜欢看着页面里面一堆tag的,对于维护来说,无疑是噩梦。
尽管ror里面也有很多tag,但是脚本语言的清晰度却要远远强于JSF这种复杂的东西。
而且是事件驱动的,暂时还没看到这块的优势在什么地方,
似乎更喜欢ror那种简单清晰的事件驱动模型。
REST也没有摸到,还在找。
不过后端的思想很不错,避免了诸多对象的转来转去。
现在还有一个比较迷惑的地方,看起来entity bean能够直接进入web层是个很不错的选择,
但java ee毕竟是java ee,不是ror,
当我希望把web层剥离出来单独部署的时候,怎么减少entity bean的串行化传输量和解决lazy load的问题,
好像还没有想明白。
难道在seam bean中的注入时定义一个体积较小的vo对象在处理,似乎回到了po转vo的模式。
再找找答案吧,
整体来说seam值得一看,gavin king确实是个天才。
Tags:
昨天本打算把notepad++推荐给别人,
结果上官网首页一看,差点没吐血,居然抵制奥运,
当然就是拿些什么西藏人权问题来说话了,
既然如此,你喜欢地址奥运是你的爱好,我喜欢抵制你也是我的爱好,
顺带让身边在用的朋友也一起和我爱好一下了。
换SciTE、notepad2,也不用你了。
Tags: ,
一直没时间管,
不知道1个月后能不能稍微那么一点点的闲下来,
如果有时间,就准备重新启动boblog的flash相册插件,
感觉imagebox老了点,而且没法配所有的皮肤,
想寻觅一下更好的flash程序进行改造,
自己从头写的话估计周期会很长,而且没很好的美工支持。。。

我现在拖欠的任务估计已经“罄竹难书”了,感叹一下自己的拖劲,
一个月后应该会公布一个新的web应用,呵呵,这边留点胃口呗。
和我这个年龄段的人很有关系哦:)
Tags:

关于抵制

[不指定 2008/04/21 10:15 | by xeric ]
最近网上抵制消息一浪高过一浪,
大家的msn也是一个个红彤彤的,包括我的,
不过这次抵制真的不怎么样,个人感觉。
抵制JLF的人,我不知道有多少,
但是我就问一句:你们宣布自己开始抵制前,用你们的大脑好好思考了没?
如果没有,恭喜你,你和被DL利用的那些ZD分子没什么区别,
我不知道JLF支持DL的消息从何而来,至少,我没听到官方消息,
很多人觉得官方消息保守,那请问这种空穴来风的消息就不过激了?
抵制抵制,口号喊的响,不去买JLF的东西就以为自己团结了?
中国的国际地位就提高了?世界就和平了?如果真有其事,法国佬就因为这种抵制行为不支持DL了?
国家就富强了?人民就幸福了安康了?别的国家就看得起中国了?
这个就是不用大脑思考最后导致的幼稚!
这几天天天喊着口号要抵制的人,请问一下,你们中有几个能抵制一辈子的?做不到就别把自己装的很nb的爱国!
法国只是一个,还有德国呢,美国呢,日本呢,你们倒是都抵制啊,干脆自闭国门吧?
不夸张的讲,国际上很多有奶就是娘的国家都在和中国对着干呢,
中国现在遇到的问题说明中国在国际上的低位还有待提高,
但是提高不是靠抵制来做到的,“给点法国佬颜色看看,让他们见识一下中国人的力量”是这样来实现的?
别让别人笑话了,中国缺乏的是自身的实力,中国经历满清到一仗后退几十年的情况,
想要提高自身实力就应该静下心来搞发展,把综合国力搞上去,
中国的国际地位要有足够后备支持,什么是后备支持?经济,军事,生产力这些硬实力,
靠几个天天喊抵制的愤愤之辈,中国怎么提高?
我不想去讨论老外是不是能在JLF的销售中攫取中国人的利润问题,
只要没有违反商业法则,竞争就是必要的,
把国外的企业抵制的干干净净你们就以为为中国的企业扫清障碍了?扯蛋!
国内那么多企业被保护的那么好,结果不是提高到国际水平,而是拿自己人开玩笑,造点不负责任的产品。
在恶劣的环境下生存,发展,超越,反击,这是每个中国人心里应该拥有的东西,卧薪尝胆,奋发图强,
而不是天天叫叫抵制!
任何东西需要更加包容和吸收,师夷长技以制夷,学习甚至是抄袭。
很久前看到国内的Meizu搞自己的手机在德国被查了,骂声一片,说中国人只会抄,没自己的创造,
你们骂的人里面有没有现在在喊抵制的?
实在是搞笑,自己的技术落后人家这么多,不要寄希望于一夜超越,你们当中国是superman啊?
模仿甚至是抄袭很多时候都是必经之路,问题是,我们在不在提高?国人有没有看到进步?
好了,我会该申明一下我爱自己的国家了,否则又有愤青看到这个要骂我卖国贼了,虽然我不会生气而会觉得可悲。我的每一份心都在向着自己的国家,不过不是盲目的保护,而是理性的看待。
理性的为国家出力,看待国家的发展,不要国家一有贪污就说国家完蛋了,国外一施压就觉得我要抵抗了。
中国总是有这么一帮人唯恐天下不乱,何必呢?
Tags:

狼和狗

[雨 2008/01/19 12:30 | by xeric ]
听话的狗就能拿到吃的,安逸的活着,拿到所有的荣誉和赞赏。
狼无论如何都只能靠自己的努力,在恶劣的环境下,试图生存。
要有尊严的活着。

写在工作三年的纪念日。
Tags:
分页: 1/67 第一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下页 最后页 [ 显示模式: 摘要 | 列表 ]