2013-04-17 101 views
0

找到了解決方法。底部看解決方案Easymock:問題模擬void DAO方法 - 意外的方法調用

好吧我一整天都在EasyMock監獄,我需要一些幫助走出去。 我有一個void save()方法,我正在嘲笑。

public void save(PurchaseOrder po); 

PurchaseOrder的是,有兩個孩子

USPurchaseOrder 
CAPurchaseOrder 

這裏是我的JUnit測試代碼的抽象類

MyDAO myDAO = createMock(MyDAO.class); 
PurchaseOrder usPurchaseOrder = new USPurchaseOrder(msgUS); 
myDAO.save(usPurchaseOrder); 
expectLastCall().atLeastOnce(); 

PurchaseOrder caPurchaseOrder = new CAPurchaseOrder(msgCA); 
myDAO.save(caPurchaseOrder); 
expectLastCall().atLeastOnce(); 

replay(myDAO); 

//execute code that uses DAO 

我得到以下錯誤:意外的方法調用MyDAO.save( USPurchaseOrder @ 1a70b8):

這裏唯一的問題是DAO簽名沒有需要USPurchaseOrder,只有了一個採購訂單,這是我進入。此外,

即使這樣做會產生同樣的錯誤

myDAO.save(new USPurchaseOrder(msgUS)); 

我在做什麼錯?

解決方法 好吧,我一直在刻苦攻讀這一點,雖然我不明白爲什麼我收到錯誤,我增加了anyObject()的代碼才能正常工作。

MyDAO myDAO = createMock(MyDAO.class); 

myDAO.save(anyObject(OrderRequest.class)); 

myDAO.save(anyObject(OrderRequest.class)); 

replay(myDAO); 

//execute code that uses DAO 

回答

0

對於匹配方法調用,EasyMock使用方法參數equals()。你應該考慮到它。所以我的猜測是,您的USPurchaseOrder中沒有執行equals(),並且使用了默認的Object.equals()行爲,該行爲比較了USPurchaseOrder的實例是否相同,這顯然不是。

相關問題