找到了解决方法。见底部解决方案
好的,我整天都在 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