0

找到了解决方法。见底部解决方案

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

1 回答 1

0

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

于 2013-08-09T09:30:43.107 回答