Java 部分嘲笑的替代方案?
厌倦了手工制作mocks,我试图将Mockito引入我的项目 假设我有一组数据库访问器,它们隔离给定用例(或服务)的所有Hibernate查询。所以我可以有这样的接口,比如Java 部分嘲笑的替代方案?,java,unit-testing,mockito,coding-style,Java,Unit Testing,Mockito,Coding Style,厌倦了手工制作mocks,我试图将Mockito引入我的项目 假设我有一组数据库访问器,它们隔离给定用例(或服务)的所有Hibernate查询。所以我可以有这样的接口,比如RoutingDao,UserDao,ReportingDao。这些接口中的每一个都扩展了一个非常通用的Dao,方法包括commit()、rollback()或reload(Entity)。使用Hibernate,后者应该在当前会话中重新加载分离的实体。在测试中,它应该只返回其参数 使用手工制作的mock很容易:我有一个Moc
RoutingDao
,UserDao
,ReportingDao
。这些接口中的每一个都扩展了一个非常通用的Dao
,方法包括commit()
、rollback()
或reload(Entity)
。使用Hibernate,后者应该在当前会话中重新加载分离的实体。在测试中,它应该只返回其参数
使用手工制作的mock很容易:我有一个MockDao
,具有此方法的通用实现,MockRoutingDao
将扩展MockDao
并使用该实现。我在Mockito中看到的一种方法是创建MockRoutingDao
,它扩展了MockDao
,并将未经修改的调用委托给它。未继承的方法将被一个spy()
模拟。但是这很难看——我仍然需要手工制作一个mock,而部分mock和继承用于重用某些实现的整个想法是一团糟
我怎样才能改进它为模拟方法创建共享实现的最佳实践是什么,可以在许多测试中重复使用?您真的想编写一个org.mockito.stubing.Answer实现来处理每个*DAO mock将处理的常见内容
您仍然可以在存根时添加自定义的
。您确实想编写一个org.mockito.stubing.Answer实现来处理每个*DAO mock将处理的常见内容
您仍然可以在存根时添加自定义的。@Griff Powermock也是一个漂亮的工具Powermock用于模拟静态和私有(它通过调用另一个类加载器来实现);它与Mockito或EasyMock等模拟框架一起使用。@Griff Powermock也是一个漂亮的工具Powermock用于模拟静态和私有(它通过调用另一个类加载器来实现);它与Mockito或EasyMock等模拟框架结合使用。