Easymock:问题Mocking void DAO方法 - 意外的方法调用

时间:2013-04-17 19:39:26

标签: easymock

找到了解决方法。请参阅底部的解决方案

好的,我整天都在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

1 个答案:

答案 0 :(得分:0)

对于匹配方法调用,EasyMock使用equals()作为方法参数。你应该考虑到它。所以我的猜测是你没有在equals()中实现USPurchaseOrder并使用默认的Object.equals()行为,比较USPurchaseOrder的实例是否相同,这是显然不是。