学了两天 Mockito,初看完全解耦非常棒,但是写了几个测试发现是个大坑。
因为测试代码和实际代码强耦合了!比如你在 Service 里面调了 dao 类的 getA 方法,Mockito 就要求你 mock dao 类的 getA 方法。我如果到时候改成调 dao 类的 getB 方法,测试代码也必须改。无论是 service 还是 dao 类,只要任何一个的方法名改了或者逻辑改了,都必须改测试代码。
而我认为单元测试的意义还是在于,我不管你下面的实现是什么,只要这个方法完成了我的测试需求就行。但是 mockito 这种测试代码和实际代码强耦合的情况,我必须把被测代码的所有其他类调用都找出来并且 mock,你重构 service 或者换了数据库,测试代码也得重新找出来改!
另外关于测试的效果,我看还有点掩耳盗铃的感觉:写测试的时候,我假设我原来的代码没问题,才找调用出来 mock,而测出来肯定也没有问题呀。而事实上,问题很多时候就是出在别的类调用的实际返回值不符合预期。
因为测试代码和实际代码强耦合了!比如你在 Service 里面调了 dao 类的 getA 方法,Mockito 就要求你 mock dao 类的 getA 方法。我如果到时候改成调 dao 类的 getB 方法,测试代码也必须改。无论是 service 还是 dao 类,只要任何一个的方法名改了或者逻辑改了,都必须改测试代码。
而我认为单元测试的意义还是在于,我不管你下面的实现是什么,只要这个方法完成了我的测试需求就行。但是 mockito 这种测试代码和实际代码强耦合的情况,我必须把被测代码的所有其他类调用都找出来并且 mock,你重构 service 或者换了数据库,测试代码也得重新找出来改!
另外关于测试的效果,我看还有点掩耳盗铃的感觉:写测试的时候,我假设我原来的代码没问题,才找调用出来 mock,而测出来肯定也没有问题呀。而事实上,问题很多时候就是出在别的类调用的实际返回值不符合预期。