繁体   English   中英

使用Easymock时无法识别数据源

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM