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