因为测试代码和实际代码强耦合了!比如你在 Service 里面调了 dao 类的 getA 方法,Mockito 就要求你 mock dao 类的 getA 方法。我如果到时候改成调 dao 类的 getB 方法,测试代码也必须改。无论是 service 还是 dao 类,只要任何一个的方法名改了或者逻辑改了,都必须改测试代码。
而我认为单元测试的意义还是在于,我不管你下面的实现是什么,只要这个方法完成了我的测试需求就行。但是 mockito 这种测试代码和实际代码强耦合的情况,我必须把被测代码的所有其他类调用都找出来并且 mock,你重构 service 或者换了数据库,测试代码也得重新找出来改!
应该改。单元测试主要是验证 SUT ( system under test )本身的实现逻辑的正确性,你把实现逻辑都改了,单元测试当然也需要修改。比如你的例子,getA 改成 getB 方法,参数、返回有没有变更?有变更那 service 的代码就需要修改,service 修改了就需要单元测试确保修改的正确性;如果只是换个名字,现在 IDE 的重构功能可以把相关名称都替换了,也不需要手动修改。