在父类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
有什么建议吗?
答案 0 :(得分:0)
在下面的代码中,
dao = createMock(BaseDAO.class);
您正在为类/接口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
您可以根据您正在尝试的内容来模拟基类OR子类。我的意思是,如果您将此Mock类传递给其他需要基类或子类的方法/类...
更新:
您必须模拟DBWrapper
实例并将其注入您的父/子类或者您可以模拟返回模拟实例的getDBWrapper
方法
obj = mock(YourClass.class)
when(obj).getdbwrapper().return(mockDbWrapper)
抱歉,我正在打电话,pl执行语法