模拟的冬眠Transactionaldao



我无法模拟TransactionalDao的任何方法。

注意: - t是我的实体类。

代码流是这样的。

public class MainClassImpl extends TransactionalDao<T> implements MainClass{
     public Set<T> method1(Set<T> setOfTypeT){
            return super.addOrUpdate(setOfTypeT);
     }
}

我的测试课:

public class MainClassTest{
      @Test
      public void method1Test(){
            MainClassImpl spy= Mockito.spy(new MainClassImpl());
            Set<T> setTest= new HashSet<T>();
            Mockito.doReturn(setTest).when((TransactionalDao<T>)spy).addOrUpdate(setTest);
            spy.addOrUpdateDeviceDetails(setTest);  
      }
}

当我在调试模式下运行它时,它正在调用TransactionalDao并尝试执行它。我们如何模拟TransactionalDao

我不认为您可以在Mockito中模拟这种行为。

我会建议以下(按此顺序):

1)如果不覆盖addorupdate方法,则从方法调用中删除超级前缀,那么Mockito将模拟该方法:

public Set<T> method1(Set<T> setOfTypeT){
        return addOrUpdate(setOfTypeT);
}

2)不确定是什么促使您实际扩展了使用DAO类的服务类。我认为,您应该选择构图。当您将DAO用作依赖性时,嘲笑该方法将不再是问题了。

3)如果您不能选择上述任何一个,则将留下一些自定义变方法,如以下内容:

public class MainClassImpl extends TransactionalDao<T> implements MainClass{
 public Set<T> method1(Set<T> setOfTypeT){
        return baseAddOrUpdate(setOfTypeT);
 }
 public Set<T> baseAddOrUpdate(Set<T> setOfTypeT){
     return super.addOrUpdate(setOfTypeT);
 }
}

测试

public class MainClassTest{
      @Test
      public void method1Test(){
            MainClassImpl spy= Mockito.spy(new MainClassImpl());
            Set<T> setTest= new HashSet<T>();
            Mockito.doReturn(setTest).when(spy).baseAddOrUpdate(setTest);
            spy.addOrUpdateDeviceDetails(setTest);  
      }
}

底线是,如果这不是您无法触摸的一些旧旧代码,那么请选择选项2。整个应用程序将受益。

相关内容

  • 没有找到相关文章

最新更新