厌倦了手工制作的模拟,我正在尝试将 Mockito 引入我的项目。
假设我有一堆数据库访问器,它们隔离给定用例(或服务)的所有 Hibernate 查询。所以我可以有这样的接口RoutingDao
,,,UserDao
。ReportingDao
这些接口中的每一个都扩展了一个非常通用Dao
的方法,例如commit()
、rollback()
或reload(Entity)
。对于 Hibernate,后者应该使用当前会话重新加载分离的实体。在测试中,它应该只返回它的参数。
使用手工制作的模拟很容易:我有一个MockDao
该方法的通用实现,MockRoutingDao
并将扩展MockDao
和使用该实现。我在 Mockito 中看到的一种方法是创建MockRoutingDao
扩展MockDao
并将未模拟的调用委托给它的方法。未继承的方法将使用spy()
. 但这很丑 - 我仍然需要手工制作一个模拟,而部分模拟和继承以重用某些实现的整个想法是一团糟。
我该如何改进它?为可以在许多测试中重用的模拟方法创建共享实现的最佳实践是什么?