当前位置: 首页 > 知识库问答 >
问题:

如何模拟抽象类方法?

司马振国
2023-03-14
public class DataDaoImpl extends SuperDao<CustomClass> 
{
   public List<Long> findAllbyId(Long productId)
   {
      Session session = getCurrentSession();
      .......
      //Rest of code
   }
}

下面是抽象类的代码:

public abstract class SuperDao<T>
{
    protected final Session getCurrentSession() 
     {  
       return sessionFactory.getCurrentSession();
     }
}

现在,我应该如何为datadaoimpl编写单元测试,并且应该如何在session session=getCurrentSession();中模拟会话?

我在Stackoverflow上尝试了不同的解决方案,但仍然无法模拟它并获得会话模拟。

@Test
public void testDataDaoImpl()
{
SessionFactory mockedSessionFactory = Mockito.mock(SessionFactory.class);
Session mockedSession = Mockito.mock(Session.class); 
Mockito.when(mockedSessionFactory.getCurrentSession()).thenReturn(mockedSession);   
DataDaoImpl DDI_Instance = new DataDaoImpl((long) 120);
DDI_Instance.findAllbyId(Long productId);
}

共有1个答案

董权
2023-03-14

datadaoimpl扩展superdao时,方法getCurrentSession本质上成为datadaoimpl的一部分,您应该避免嘲笑正在测试的类。

您需要做的是,在调用SessionFactory.getCurrentSession()时,模拟SessionFactory并返回模拟对象。这样,getCurrentSession中的datadaoImpl将返回模拟对象。

希望能有所帮助。

 类似资料:
  • 我正在尝试对扩展抽象基的类进行单元测试。以下是“类似的类”,以供说明: 下面是我正在尝试的单元测试: 当我做这个测试的时候 java.lang.NullPointerException 在中 我知道自动连线的“滤水器”没有初始化。但接下来,我只想在我的单元测试中模拟抽象的“非抽象”方法。 我该如何使用EasyMock来实现这一点呢?另外,我不知道和应该做什么。

  • 在Java(Spring Boot)应用程序中,我使用JUnit和Mockito,并想测试以下服务方法: 方法在以下抽象类中: 我尝试使用和stub通过,但在我看来,它不能像在具体的类中那样被模拟。那么,我应该如何模拟抽象类中的变量和方法呢?

  • 如何使用Mockito或PowerMock模拟一个由子类实现,但从抽象超类继承的受保护方法? 换句话说,我想测试“DoSomething”方法,同时嘲弄“DoSomethingElse”。 抽象超类 子类实现 解决方案 这里给出的答案是正确的,如果涉及的类是在同一包中,将会起作用。 但如果涉及不同的包,一个选择是使用PowerMock。下面的例子对我有效。当然可能有其他的方法,这是一个可行的。 注

  • 问题内容: 考虑以下(简化的)枚举: 可以在以下函数中使用它: 我现在想为此编写一个单元测试,以模拟每个枚举实例中对myMethod()的调用。我尝试了以下方法: 但是,真正的实现和正在调用。 我做错了什么? 问题答案: 枚举中的每个常量都是一个静态的最终嵌套类。因此,要模拟它,您必须在PrepareForTest中指向嵌套类。 返回预初始化的数组,因此在您的情况下也应进行模拟。 每个枚举常量都只

  • 我试图对一个抽象类进行单元测试,因此需要为该类的抽象方法提供一个模拟实现。 我想我是在一个利基的情况(!)因为或似乎都没有帮助。 尝试但这完全破坏了我的抽象类(创建它时不调用构造函数,运行到NPE) 尝试了,但这要么需要一个真实类的实例(我不能提供它,因为它是抽象的duh),要么尝试调用一个不存在的no-arg构造函数。

  • 如何模拟返回已强制转换的模拟对象的方法。 试验方法。