[英]Data source not recognized while using using Easymock
在父类BaseDAO.java中,我有一个方法:
public DBWrapper getDBWrapper() {
//Obtains the DBwrapper with the data source details
}
//在子类ChildDAO中,我有一个方法:
public int getBookRefCode(int bookId) {
//I am calling getDBWrapper.executeQuery() to execute query on my database
}
在JUnit测试类中:我已经创建了Child和Base类的实例
BaseDAO dao = new BaseDAO();
ChildDAO cdao = new ChildDAO;
dao = createMock(BaseDAO.class);
@Test
int res = cdao.getBookRefCode(id);// This does not return any result and says data source is not recognized
但是,当getDBWrapper实现直接在子类中时,我会
cdao = createMock(ChildDAO.class); //it works
有什么建议么?
在下面的代码中,
dao = createMock(BaseDAO.class);
您正在创建的是类/接口BaseDAO
Proxy
,该Proxy
返回默认值(您可以更改BaseDAO
/存根方法调用)
现在,当你做
@Test
int res = cdao.getBookRefCode(id);// This does not return any result and says data source is not recognized
您实际上是在引用指向ChildDAO
类的引用上调用方法,该类将调用真实的数据源,但是当您对子类进行模拟时,它将返回模拟值,这就是工作原理。
cdao = createMock(ChildDAO.class); //it work
您可以根据自己的尝试模拟基类或子类。.我的意思是,如果您将此Mock类传递给其他需要基类或子类的方法/类,则...
更新:您必须模拟DBWrapper
实例并将其注入到您的父/子类中,或者您可以模拟getDBWrapper
方法,该方法返回模拟实例
obj = mock(YourClass.class)
when(obj).getdbwrapper().return(mockDbWrapper)
抱歉,我在打电话,请执行语法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.