如何将Mockito用于复合对象



我想模拟一个类似于的DAO管理器

public class DaoManager{
  @Autowired
   private Service1 service;
   @Autowired
   private Service2  service 2;
   @Autowired
   private DAOManager1 manager 1;
   public CustomerDetail getCustomerDetails(){
       manager1.getCustomerDetails();
}
public class DaoManager1{
  @Autowired
   private Service3 service3;
   @Autowired
   private Service4  service 4;
  public getCustomerDetails(){
    Service3.getCustName();
    Service4.getCustAddress();
}

我的问题是如何嘲笑DaoManager类?如果我模拟它,我需要模拟从getCustomerDetails方法调用的每个管理器/服务?这对我来说是一笔巨大的开销。有什么想法吗?我完全搞错了?

编辑:

当我运行我的junit时,我会出现以下错误。

原因:org.springframework.beans.factory.BeanCreationException:创建名为"mockDaoManager"的bean时出错:注入自动连接的依赖项失败;嵌套异常为org.springframework.beans.factory.BeanCreationException:无法自动连接字段:private x.y.z.Service2 x.y.z_Service2;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型[x.y.z.Service2]的匹配bean:应至少有1个bean符合此依赖项的自动连线候选条件。依赖注释:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

您必须在接口中获得DaoManager合约,并模拟最后一个

 Interface IDaoManager {
     CustomerDetail getCustomerDetails();
 }
 public class DaoManager implements IDaoManager 

然后按照nsanglar的建议

 IDaoManager daoManagerMock = mock(IDaoManager.class);
 [...]

当然,您必须使用dao的接口来注入dao,无论如何,这是一个很好的做法

实际上,你只需要模拟对象的行为,所以基本上你可以定义你期望对象做什么,而不必考虑它的实现。在您的情况下,当嘲笑DaoManager时,例如,您可以在测试设置中写道:

DaoManager daoManagerMock = mock(DaoManager .class);
when(daoManagerMock .getCustomerDetails()).thenReturn(...);

因此,为了回答您的问题,您不必嘲笑您的dao所依赖的每一个服务/经理。

相关内容

  • 没有找到相关文章

最新更新