5

私は新しいプロジェクトに取り組んでおり、彼らは私がよく知らない EasyMock (v2.4) を使用しています。私は次のことができる必要がありますが、誰も答えがありません。現在のフレームワークはBaseDao.class、次の例に従ってモックアウトしたい を使用していますが、エラーが発生します。私はいくつかの方向を探しています。

BaseDao baseDao = EasyMock.mock(BaseDao.class);

EasyMock.expect(baseDao.findByNamedQuery("abc.query"), EasyMock.anyLong()).andReturn(...);
EasyMock.replay(baseDao);

EasyMock.expect(baseDao.findByNamedQuery("def.query"), EasyMock.anyLong).andReturn(..);
EasyMock.replay(baseDao);

私が得ているエラーは次のとおりです...

java.lang.AssertionError: 
  Unexpected method call findByNamedQuery("def.query"):
    findByNamedQuery("abc.query", 1): expected: 1, actual: 0
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:32)
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:61)
at $Proxy5.findByNamedQuery(Unknown Source)
4

3 に答える 3

1

二度定義しているreplay(...)ので、最初のものだけがカウントされます。を呼び出すまで、このように定義されていますreset(...)

問題を解決するには、次のいずれかを実行できます。

1) テストの失敗の原因となっている呼び出しを削除します。

EasyMock.expecting(baseDao.findByNamedQuery("def.query"), EasyMock.anyLong)
   .andReturn(...);
EasyMock.replay(baseDao);

2) 予想で固定文字列を定義する代わりに、任意の文字列を期待できます。

EasyMock.expecting(baseDao.findByNamedQuery((String)EasyMock.anyObject()), 
   EasyMock.anyLong).andReturn(...);
于 2012-08-30T21:46:42.557 に答える
0

findByNamedQueryが2回呼び出されることを期待している場合は、replayメソッドへの最初の呼び出しを削除します。テストへの期待がすべて設定された後、それは一度だけ必要です。

BaseDao baseDao = EasyMock.mock(BaseDao.class);

EasyMock.expect(baseDao.findByNamedQuery("abc.query"), EasyMock.anyLong()).andReturn(...);
// Remove EasyMock.replay(baseDao);

EasyMock.expect(baseDao.findByNamedQuery("def.query"), EasyMock.anyLong).andReturn(..);
EasyMock.replay(baseDao);
于 2012-08-30T21:56:02.620 に答える
0

テストでは、パラメーター「abc.query」を使用したメソッド呼び出しが想定されていたようですが、代わりに「def.query」を使用してメソッドが呼び出されました。

テストを段階的にデバッグすると、問題を見つけるのに役立ちます。

于 2012-08-30T21:11:37.330 に答える