[英]How to mock Abstract class method?
我需要测试一个 class 扩展抽象 class 并使用它受保护的方法。 这是代码:
public class DataDaoImpl extends SuperDao<CustomClass>
{
public List<Long> findAllbyId(Long productId)
{
Session session = getCurrentSession();
.......
//Rest of code
}
}
这是抽象class的代码:
public abstract class SuperDao<T>
{
protected final Session getCurrentSession()
{
return sessionFactory.getCurrentSession();
}
}
现在我应该如何为DataDaoImpl
编写单元测试并且应该在Session session = getCurrentSession();
?
我在 Stackoverflow 上尝试了不同的解决方案,但我仍然无法模拟它并获得 session 模拟。
我已经尝试使用 mocking getcurrentSession()
按照以下代码回答中的建议:
@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);
}
但是session.getCurrentSession()
仍然失败。
由于DataDaoImpl
扩展SuperDao
,方法getCurrentSession
固有地成为DataDaoImpl
的一部分,您应该避免 mocking 被测试的 class 。
您需要做的是,模拟SessionFactory
并在调用sessionFactory.getCurrentSession()
时返回模拟的 object。 使用DataDaoImpl
中的getCurrentSession
将返回模拟的 object。
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.