質問

春ダを書DAOs.使用時iBATISとしての永続化の枠組みを広げるSqlMapClientDaoSupport、SqlMapClient模擬する必要がありますのDAOがあったら教えてください.SqlMapClientTemplateなインターフェースとEasyMockきを模擬します。

役に立ちましたか?

解決

DAOとのユニットテストと仲がよくない。ない意味を模擬いるコンポーネントはビジネスロジックとはデータベースアクセス。実際に試したほうがよいでしょう代わりに、統合テストです。ぜひ、春のリファレンスドキュメント第8.3: http://static.springframework.org/spring/docs/2.5.x/reference/testing.html

他のヒント

この正確な理由はなぜんから新たな方法論を提供すること SqlMapClientDaoSupport.その代わり、注入依存関係の SqlMapClientTemplate (入力インターフェースとな SqlMapClientOperations).この春2.5例:

@Component
public class MyDaoImpl implements MyDao {

    @Autowired
    public SqlMapClientOperations template;

    public void myDaoMethod(BigInteger id) {
        int rowcount = template.update("ibatisOperationName", id);
    }
}

として@Banengusk果-達成することができ付 Mockito.しかし、見極めることが重要とDAOを利用する春 SqlMapClientTemplate ロッドやルアーを使用することもご模擬 SqlMapClient.たりのgdp SqlMapClientTemplate 代表者メソッドの呼び出しの SqlMapSession のIBatis。

そのため一部を模擬設定が必要です:

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"));

Mockito.これにより、模擬授業、インタフェース

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top