使用Easymock时无法识别数据源

时间:2017-07-22 07:14:55

标签: java datasource 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

有什么建议吗?

1 个答案:

答案 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执行语法