簡體   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