找到了解决方法。请参阅底部的解决方案
好的,我整天都在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,只需要一个PurchaseOrder,这就是我传递的内容。
即使这样做也会产生相同的错误
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 :(得分:0)
对于匹配方法调用,EasyMock使用equals()
作为方法参数。你应该考虑到它。所以我的猜测是你没有在equals()
中实现USPurchaseOrder
并使用默认的Object.equals()
行为,比较USPurchaseOrder
的实例是否相同,这是显然不是。