Spring DA有助於編寫DAO。當使用iBATIS作爲持久化框架並且擴展SqlMapClientDaoSupport時,應該爲DAO設置一個SqlMapClient模擬,但是我不能這樣做。 SqlMapClientTemplate不是一個接口,EasyMock不能爲它創建一個模擬。如何對擴展的DAO進行單元測試SqlMapClientDaoSupport
5
A
回答
1
DAO和單元測試相處得不好! 在沒有任何業務邏輯並專注於數據庫訪問的組件中嘲笑任何東西都沒有意義。 你應該嘗試寫一個集成測試。看看春季參考文件,章節8.3:http://static.springframework.org/spring/docs/2.5.x/reference/testing.html
0
嘗試Mockito。它允許模擬類,而不僅僅是接口。
1
這個確切的原因是我爲什麼不從SqlMapClientDaoSupport
延伸。相反,我注入依賴SqlMapClientTemplate
(鍵入爲接口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);
}
}
+2
另一個爲什麼組合比繼承更好的原因。 – 2010-08-30 13:37:32
1
正如@Banengusk建議 - 這可以通過Mockito來實現。但是,確定您的DAO將使用包含您的模擬SqlMapClient
的Spring SqlMapClientTemplate
非常重要。事實上,SqlMapClientTemplate
委託調用IBatis層中的SqlMapSession
。
因此一些額外的模擬設置要求:
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"));
相關問題
- 1. 如何對Django-CMS擴展進行單元測試?
- 2. 使用反應性擴展對事件進行單元測試
- 3. DAO單元測試
- 4. 單元測試DAO
- 5. 如何單元測試角度擴展
- 6. 單元測試Chrome擴展?
- 7. 單元測試Joomla擴展
- 8. 如何對wxPython進行單元測試?
- 9. 如何對rxjs5進行單元測試?
- 10. 如何對Response.Redirect進行單元測試?
- 11. 如何對IDataErrorInfo進行單元測試?
- 12. 如何對Xtext進行單元測試
- 13. 如何對FileContentResult進行單元測試?
- 14. 單元測試WCF行爲擴展
- 15. 鉻擴展運行javascript單元測試
- 16. 單元測試的DAO
- 17. 單元測試一個DAO
- 18. 單元測試DAO層呢?
- 19. 單元測試dao類
- 20. 使用mockito進行DAO層的單元測試
- 21. 單元測試Firefox的擴展?
- 22. 如何使用System.Windows.Threading.Dispatcher對單元進行單元測試
- 23. CoreDispatcher與反應擴展單元測試
- 24. 單元測試UrlHelper擴展方法
- 25. 如何進行單元測試App.OnStartup
- 26. Grails - 如何進行單元測試addTo *
- 27. 如何進行單元測試navigator.notification.alert
- 28. 我如何進行單元測試openWithCompletionHandler
- 29. OpenGL如何進行單元測試?
- 30. 如何進行單元測試?
雖然我可以看到你的邏輯,我可以設想,可以從單位受益DAO功能測試。因此,我認爲公平地說,DAO不應該進行單元測試 - 這一切都取決於有問題的班級。 – teabot 2010-06-16 10:47:41