猪肉炖粉:“那啥,猪哥啊,这两天你身价大涨,发了吧?忙啥呢?”
一只猪:“可不是!到哪儿都被采访,这名猪也有隐私权滴!最近特想过普通猪的生活。这不,洗尽铅华,老老实实地躲圈里整Java呢”
话说这Java的一级摸客(EasyMock),老猪最近用的满多的。在Java 4里面不忍卒睹的代码在java 5里面骤然变得性感许多。不过用的多了,也发现有些不方便的地方。最不爽的就是:俺老猪不是粗心吗?有时候不小心就会忘了EasyMock.verify()或者IMocksControl#verify()。
这一忘了不打紧,有些bug就藏在那,测试也过了,但是bug也没找出来。
有很多淫说这还不容易?用IMocksControl,然后在tearDown()里写control.verify(),就没事了。(不好,被你发现老猪还在用回立牌JUnit 3.8)
嘿嘿,老猪针对这种左倾机会主义思潮做出了最坚决的斗争。
为啥?且听老猪我慢慢到来。在tearDown()里面写verify()有三个很致命的毛病:
1。 JUnit 3.8的tearDown()相当于try-finally里面的finally。也就是说,即使你的test出现了异常,它也会被执行。因此如果你的测试代码还没等到verify()的时候就因为某种原因歇菜了(比如,某个assertEquals()失败了),这个异常会被吞噬掉,你得到的将会是一个毫无意义的EasyMock的verify()异常。
2。tearDown()很有可能被子类重载滴。万一子类忘记了调用super.tearDown()怎么办?”子类不应该忘“?呵呵,要我说你还不如干脆就”不应该“忘记调用verify()呢。这不是前门驱虎,后门进狼么?
3。不能不分3*7=21就verify呀同志!咱假如说,俺老猪懒,为了跑到绿草如茵的山坡睡个暖洋洋的懒觉,写了一个啥也不干的testStone(),反正回头就说这山叫石头山,山上有个石头洞,洞里有俩和尚在讲故事...(说走嘴了),迷迷糊糊闭着眼睛哼着小曲点击了一下my precious testStone()。“啦啦啦啦啦,啦啦啦啦,天空出彩霞呀,.哦?.哦.bug出来啦呀
”。啥?居妍说俺的testEmpty错了?俺老猪是无辜地呀。因为俺啥也没干啊!是猴哥。没错,肯定是这弼马温!说啥不能还没replay()呢就verify()?废话,我也没让你verify呀。这个故事告诉我们,不能没事就verify(),你至少得知道人家replay()了没有先。
老猪的解决办法是做一个PorkMockTest类,然后在TestCase#runTest()上做文章:
public class PorkMockTest extends TestCase {
private IMocksControl control = null;
private boolean replayed = false;
private boolean verified = false;
@Override protected void runTest() throws Throwable {
super.runTest();
if (replayed && !verified) {
verify();
}
}
private IMocksControl control() {
if (control == null) {
control = EasyMock.createMockControl();
}
}
public <T> T mock(Class<T> type) {
return control.createMock(type);
}
protected void replay() {
control().replay();
replayed = true;
}
protected void verify() {
verified = true;
control().verify();
}
}
这个代码还比较简陋,还不处理strict和nice mock。不过呢,基本上就剩照猫画虎了——当然,我没跟你说就copy&paste啊,你怎么也得refactor一下才好意思见人吧?
好了,现在只要你继承我这个PorkMockTest,你就可以一直往前走,不用往两边看了。你可以理直气壮地忘掉verify()——要求我们懒惰如猪的程序员记住计算机可以搞定的东西是犯罪呀,对人民赤果果地犯罪!
好,现在我可以这么写了:
public class LionHeadTest extends PorkMockTest {
public void testHuoHou() {
LionHead head = mock(LionHead.class);
head.bite();
replay();
cook(head);
// 忘记吧,忘记吧。忘记是一种幸福。能忘记的人才能快乐地吃狮子头啊!
}
}
欢乐的时光总是过得快,又到时间说白白。不要走开,广告之后请继续收看俺摸(mock),俺摸,俺默默摸!
分享到:
相关推荐
本系统采用VB+acess编写,对学生成绩进行输入,查询和修改功能。另外,系统有权限限制,并且还有输入密码检测和输入超过3次则自动退出系统。。。。
自己测试通过小例子,STL格式的3D模型,在Android里面通过触摸旋转的例子
在这里,“俺”作为亲生儿子,每天辛勤地劳作,无论是春耕秋收,还是拉磨打水,它总是默默地承受着。与此同时,非亲生的骡子却能够自由地享受生活,得到父亲更多的宠爱和教育资源。这种看似不公的待遇,实际上在人类...
本压缩包文件名为“@默默默默发呆PPT设计大师个人简历ppt模板.rar”,提供了由设计师@默默默默发呆创作的一款个性化PPT模板,适用于设计个人简历。以下是关于PPT设计和个人简历制作的相关知识点: 1. PPT设计基础:...
【默默无名的新观念】 在当今社会中,“默默无名”这一词汇往往被赋予了新的含义。传统上,“默默无名”可能让人联想到那些在战争年代为国家付出而不求回报的无名英雄,他们的无私奉献和坚韧精神是值得我们尊敬和...
在这个世界上,存在着这样一群人,他们没有惊天动地的壮举,也没有轰轰烈烈的事迹,却以他们的默默付出,为社会的运行和人类的进步打下了坚实的基石。他们是那些在日常生活中或者特定领域中默默奉献的人,他们或许是...
默默学课程专用播放器.exe
... ...初学者应该通过实际动手创建完整的网页来熟悉这些基础知识,实践中理解各种元素的属性和作用,这有助于形成直观的认识,而不是仅仅停留在理论层面。 ...你可以通过编写简单的脚本来实践这些概念。...
默默的等待模板"是一个专为Discuz! 论坛系统设计的网页模板,旨在提供用户友好的界面和优化的用户体验。Discuz! 是一款广泛应用的开源社区论坛软件,它允许网站管理员轻松搭建和管理自己的论坛社区。这款模板名为...
默默网咖岗位工作流程.doc
这篇文档标题为“优秀记叙文母亲默默地.doc”,是一篇以个人视角讲述与哑巴母亲关系的记叙文。文章通过作者的亲身经历,展现了母爱的伟大和无声的付出,同时也描绘了作者从幼年到成年对母亲态度的转变。 在描述中,...
康师傅茶饮料广告策划提案默默绿茶.pptx
《默默企业建站系统MoMoCMS 5.9——打造高效的企业在线平台》 默默企业建站系统MoMoCMS是一款专为企业用户设计的开源建站工具,它以其易用性和强大的功能深受用户喜爱,被誉为“类似WordPress的页面管理风格”的建...
在Android平台上,开发人员可以利用服务(Service)组件在后台执行一些持续性的任务,比如我们的主题——在后台默默拍照。Android Service是Android四大组件之一,它允许应用在没有用户交互的情况下运行,这对于需要...
PHP实例开发源码—MoMoCMS PHP默默企业建站系统.zip PHP实例开发源码—MoMoCMS PHP默默企业建站系统.zip PHP实例开发源码—MoMoCMS PHP默默企业建站系统.zip
为解决这一问题,应运而生了一款名为“全天候默默保护眼睛健康的软件”,它的出现,为长时间使用电脑的人们提供了一种新颖的护眼方案。 这款软件的核心优势在于其独特的自动调整屏幕色温功能。色温是指光源颜色的...
"默默企业建站系统MoMoCMS.7z"是一个压缩包文件,包含了默默企业建站系统MoMoCMS的所有必要组件和资源。MoMoCMS是一款专为企业建站设计的开源内容管理系统,它允许用户无需深入编程知识就能搭建和管理自己的企业网站...
康师傅茶饮料广告策划提案--默默绿茶.pptx