5

Spring DA は、DAO の作成に役立ちます。永続化フレームワークとして iBATIS を使用し、SqlMapClientDaoSupport を拡張する場合、DAO に SqlMapClient モックを設定する必要がありますが、それができません。SqlMapClientTemplate はインターフェースではなく、EasyMock はそのモックを作成できません。

4

4 に答える 4

1

@Banenguskが示唆したように、これはMockitoで実現できます。ただし、DAOがSqlMapClientTemplateモックをラップするスプリングを使用することを確認することが重要SqlMapClientです。実際、SqlMapClientTemplate呼び出しをSqlMapSessionIBatisレイヤーのに委任します。

したがって、いくつかの追加のモックセットアップが必要です。

mockSqlMapSession = mock(SqlMapSession.class);
mockDataSource = mock(DataSource.class);

mockSqlMapClient = mock(SqlMapClient.class);
when(mockSqlMapClient.openSession()).thenReturn(mockSqlMapSession);
when(mockSqlMapClient.getDataSource()).thenReturn(mockDataSource);

dao = new MyDao();
dao.setSqlMapClient(mockSqlMapClient);

次に、次のような動作を確認できます。

Entity entity = new EntityImpl(4, "someField");
dao.save(entity);

ArgumentCaptor<Map> params = ArgumentCaptor.forClass(Map.class);
verify(mockSqlMapSession).insert(eq("insertEntity"), params.capture());
assertEquals(3, params.getValue().size());
assertEquals(Integer.valueOf(4), params.getValue().get("id"));
assertEquals("someField", params.getValue().get("name"));
assertNull(params.getValue().get("message"));
于 2010-06-16T11:33:47.157 に答える
1

この正確な理由は、私がから拡張しない理由ですSqlMapClientDaoSupportSqlMapClientTemplate代わりに、 ( interface として型指定された)への依存関係を注入しますSqlMapClientOperations。Spring 2.5 の例を次に示します。

@Component
public class MyDaoImpl implements MyDao {

    @Autowired
    public SqlMapClientOperations template;

    public void myDaoMethod(BigInteger id) {
        int rowcount = template.update("ibatisOperationName", id);
    }
}
于 2008-09-26T13:46:21.867 に答える
1

DAO と単体テストは相性が悪い! ビジネス ロジックを保持せず、データベース アクセスに重点を置いているコンポーネントで何かをモックしても意味がありません。代わりに、統合テストを作成してみてください。スプリング リファレンス ドキュメントの 8.3 章を見てください: http://static.springframework.org/spring/docs/2.5.x/reference/testing.html

于 2008-09-21T10:57:43.243 に答える
0

モッキートを試してみてください。インターフェイスだけでなく、クラスをモックできます。

于 2008-09-21T17:35:55.407 に答える