Closed lzjyzq2 closed 2 years ago
先说结论,因为user()
调用实际是发生在RecordDao
类型里的,因此只能通过RecordDao
类型关联的Mock类来定义替代的Mock方法。做法是在测试目录中与RecordDao
路径相同的包内创建RecordDaoMock
类型,然后将user()
Mock方法定义在里面。
TestableMock在设计之初主要考虑的是规范的单元测试场景,即每个测试类都是针对被测类中的逻辑进行验证,而不会同时测到跨多个单元(类型、方法)的逻辑。譬如在RecordServiceTest
的用例中测试RecordDao
类型里的代码逻辑其实就是“跨单元”了。在这种场景下,TestableMock依然适用,但就会出现Mock方法需要被分别写到多个Mock类里的情况,这也是(我们现在认为)TestableMock在设计上最不够优雅的地方。
非常感谢您的回复,查看了多个issue,也有了大概的了解。提问是想知道是否可行、是否有较好的实践或者最佳实践。现在已经了解到了。非常感谢。
不是很好描述。。。贴一下代码吧。
RecordService
RecordDao
测试类
getRecords
,其作用是根据session
中的用户返回数据。RecordService
中的getRecords
调用了RecordDao
中的getRecords
,RecordDao
中的getRecords
内部调用了user()
去取得用户数据。我想模拟RecordDao
中的user
方法取得模拟的用户数据。这个应该如何实现。 PS:Dao
层的方法执行需要数据库连接,但数据库的连接只能在Service
层中进行。