EasyMock或者Mockito等框架的意义是啥
应该就是方便吧,你自己的机制其实也是可以的。但是如果想让别人也明白你的机制,你就需要有很多的文档和例子。所以自己写个类似的东西还是挺麻烦的。特别是你写的也没有比人家的好太多。
■网友
你的问题提到了ut的关键点,可惜网上很多文章都没有讨论这个问题,我真怀疑那些天天说ut的人有没写过ut。
第一点,用mock类好处是方便简单,你用派生类的办法,要覆盖很多成员函数,而且有些函数需要调用多次,每次返回的值都不一样,你这样还涉及很多逻辑要实现,如果用mock来做,就太简单了。我以前也用派生的方法搞过,后来发现mock太方便了,就一直用这个了。
第二点,这简直是ut的致命问题,而且这种情况出现频率非常高,我一直好奇为什么网上没看到有人吐槽这个。这的问题的出现,也反映了ut这种政治正确的不合理。一般的解释就是说,你这个函数不适合写ut,不是一个底层函数了,ut只适合写底层函数,或这说你的代码写的垃圾,没有可测性(我听到这个就想骂人,简洁明快的写法就没可测性?就是垃圾?一定要写成Java那种冗余绕圈子的才是好代码?)。如果一定要写,那么只用两种方法:
1. 修改源代码(恶心的ut侵入性),把new出来的东西绑定到一个public的成员变量上,或者入参上。
2. 用powermock,powermock可以把你的测试函数在字节流的级别上进行篡改,在运行这个函数时,它发现了你在new一个对象时,会截获这个,然后用你ut里设置的mock对象来替换。不过这种方法太暴力了,它直接修改了你待测类,让人感觉测了个假函数的感觉,而且要用这个功能必须换ut的runner,这个在一些场景下用不了,比如你已经在用spring test runner了,这个就用不了。
我说的都是java的情况,如果你是c/c++,那么只有修改源代码,这tmd超级恶心,写的好好的漂亮代码,为了加个ut,到处都插入UT宏开关,所有要mock的函数名字都要改成宏控制的名字,整个代码犹如一坨shit。
■网友
第二个问题 mock框架是直接可以redefine类的
■网友
Mock框架的意义在于比较规范,而且相对于你手动写单元测试会简单一些,
你手写了一个测试,过一个月,你再看那些接口你已经没什么印象了,
别人看你的测试也会很难看懂。
Mock的意义就在于大家都有一套测试框架会让所有人都明白你在干什么,仅此而已。
根本没有别的好处了。
■网友
1)手写太麻烦 如图,这是我手写的一个Mock类(这里用Fake可能不是很不合适)
【EasyMock或者Mockito等框架的意义是啥】
手写这样的类需要时间,如果是个新手,写出来的代码还没有使用Mock框架好看。2)有些Isolation Framework可以突破语言上的束缚。如果一个数据是被private限定的,那么即使用子类类public这个类,也不能获得它的访问权限。但是那些Isolation framework就可以不受这些限制,因为它们通过一些机制绕过了语言限制,比如Moles。
推荐阅读
- 商家通过低保户购物而把自己的利润返还赠送低保户安装宽带或者旧电脑可行吗
- 大部分黑客或安全研究员读的是啥「大学专业 」
- 开发/维护 一个类似qq会员或者Amazon Prime会员的会员系统有哪些难点和挑战
- 作为一个服装供应商,怎么样与淘宝卖家沟通才能卖出自己的产品或者拿到订单
- 是否该停止密码掩饰了
- 淘宝上有啥体验不错的假货,赝品或者山寨货?
- ibeacon目前在国内有已经应用或者商用的产品案例吗
- 为啥没有给医院、医生评分的APP或者网站
- 和朋友旅游回来到家里总会有孤独或者失落感是为啥
- 哪些资料或者书籍能够帮助全面认识亚马逊公司的经营战略