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等框架的意义是啥
【EasyMock或者Mockito等框架的意义是啥】
手写这样的类需要时间,如果是个新手,写出来的代码还没有使用Mock框架好看。2)有些Isolation Framework可以突破语言上的束缚。如果一个数据是被private限定的,那么即使用子类类public这个类,也不能获得它的访问权限。但是那些Isolation framework就可以不受这些限制,因为它们通过一些机制绕过了语言限制,比如Moles。


    推荐阅读