厌倦了手工制作的模拟,我试图将Mockito介绍给我的项目。
假设我有一堆数据库访问器,它们隔离了给定用例(或服务)的所有Hibernate查询。所以我可以使用RoutingDao
,UserDao
,ReportingDao
等接口。这些接口中的每一个都使用Dao
,commit()
或rollback()
等方法扩展了非常通用的reload(Entity)
。对于Hibernate,后者应该使用当前会话重新加载分离的实体。在测试中,它应该只返回它的论点。
使用手工制作的模拟很容易:我有MockDao
这个方法的常见实现,MockRoutingDao
将扩展MockDao
并使用该实现。我在Mockito中看到的一种方法是创建扩展MockRoutingDao
的{{1}}并将未调用的调用委托给它。未继承的方法将使用MockDao
进行模拟。但这非常难看 - 我仍然需要手工制作一个模拟器,以及部分模拟的全部想法。重用某些实现的继承是一团糟。
我该如何改进? 为模拟方法创建共享实现的最佳实践有哪些可以在多次测试中重复使用?
答案 0 :(得分:1)
你真的想编写一个org.mockito.stubbing.Answer实现来处理每个* DAO mock都会处理的常见内容。
您仍然可以为此添加自定义when
存根。