0

回避策を見つけました。一番下の解決策を参照してください

OK、私は一日中 EasyMock 刑務所にいました。私はモックアウトしている void save() メソッドを持っています。

public void save(PurchaseOrder po);

PurchaseOrder は、2 つの子を持つ抽象クラスです。

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

次のエラーが表示されます: Unexpected method call 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

一致するメソッド呼び出しのために、EasyMock はequals()メソッド パラメータに使用します。それを考慮に入れる必要があります。したがって、私の推測では、あなたは実装されておらずequals()USPurchaseOrderデフォルトのObject.equals()動作が使用されています。これは、のインスタンスUSPurchaseOrderが同じであるかどうかを比較します。

于 2013-08-09T09:30:43.107 に答える