2013-04-17 64 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的实例是否相同,这显然不是。

相关问题