alibaba / testable-mock

换种思路写Mock,让单元测试更简单
https://alibaba.github.io/testable-mock/
MIT License
1.83k stars 310 forks source link

如何Mock被测试类中关联对象中内部方法相互调用 #237

Closed lzjyzq2 closed 2 years ago

lzjyzq2 commented 3 years ago

不是很好描述。。。贴一下代码吧。

linfan commented 2 years ago

先说结论,因为user()调用实际是发生在RecordDao类型里的,因此只能通过RecordDao类型关联的Mock类来定义替代的Mock方法。做法是在测试目录中与RecordDao路径相同的包内创建RecordDaoMock类型,然后将user()Mock方法定义在里面。

TestableMock在设计之初主要考虑的是规范的单元测试场景,即每个测试类都是针对被测类中的逻辑进行验证,而不会同时测到跨多个单元(类型、方法)的逻辑。譬如在RecordServiceTest的用例中测试RecordDao类型里的代码逻辑其实就是“跨单元”了。在这种场景下,TestableMock依然适用,但就会出现Mock方法需要被分别写到多个Mock类里的情况,这也是(我们现在认为)TestableMock在设计上最不够优雅的地方。

lzjyzq2 commented 2 years ago

非常感谢您的回复,查看了多个issue,也有了大概的了解。提问是想知道是否可行、是否有较好的实践或者最佳实践。现在已经了解到了。非常感谢。