在我以前一篇文章關(guān)于spring的文章中仔細(xì)討論過spring單元測試策略,根據(jù)最近一些經(jīng)驗。今天再寫一點自己的經(jīng)驗:
1.需要把單元測試時不需要的東西拿掉,比如緩存,安全等,這就需要怎么仔細(xì)考慮spring的applicationContext.xml功能。
2.DAO與Service的測試需要使用不同的策略,一般來講,DAO單元測試只測試一個DAO類,而service需要多個DAO來支撐,有時還需要別的service支持。因此需要為DAO與service分別定義兩個基類。DAO一般不需要使用事務(wù),因此DAO測試基類繼承AbstractDependencyInjectionSpringContextTests;而service需要,Service測試基類繼承AbstractTransactionalDataSourceSpringContextTests
3.那怎么簡化開發(fā)人員編寫單元測試類呢?若每次都需要寫很多,那他們自然不愿意寫,所以架構(gòu)師應(yīng)該簡化單元測試的編程模型上下功夫。一個原則:每個人只添加自己想要的,必要時可以覆蓋全部的配置文件,完全自己來寫,下面是我寫的兩個測試基類的demo
DAO測試基類
- public abstract class AbstractDAOTestCase extends
- AbstractDependencyInjectionSpringContextTests {
- public AbstractDAOTestCase() {
- this.setAutowireMode(AUTOWIRE_BY_NAME);
- }
- @Override
- protected String[] getConfigLocations() {
- String[] baseConfigs = new String[]{ "/spring/applicationContext.xml" };
- String[] extentConfigs = getExtentConfigs();
- int length = baseConfigs.length + extentConfigs.length;
- String[] allConfigs = new String[length];
- for (int i = 0; i < baseConfigs.length; i++) {
- allConfigs[i] = baseConfigs[i];
- }
- for (int i = 0; i < extentConfigs.length; i++) {
- allConfigs[i + baseConfigs.length] = extentConfigs[i];
- }
- return allConfigs;
- }
-
- protected String[] getExtentConfigs() {
- return new String[] {};
- }
- }
Service測試基類
- public abstract class AbstractServiceTestCase extends
- AbstractTransactionalDataSourceSpringContextTests {
- protected UserDAO userDAO;
- public AbstractServiceTestCase() {
- this.setAutowireMode(AUTOWIRE_BY_NAME);
- }
- @Override
- protected String[] getConfigLocations() {
- String[] baseConfigs = new String[] { "spring/applicationContext.xml",
- "spring/applicationContext-transaction.xml",
- "org/codehaus/xfire/spring/xfire.xml",
- "spring/applicationContext-xfire.xml",
- "spring/applicationContext-osworkflow.xml",
- "spring/platform/*.xml" };
- String[] extentConfigs = getExtentConfigs();
- int length = baseConfigs.length + extentConfigs.length;
- String[] allConfigs = new String[length];
- for (int i = 0; i < baseConfigs.length; i++) {
- allConfigs[i] = baseConfigs[i];
- }
- for (int i = 0; i < extentConfigs.length; i++) {
- allConfigs[i + baseConfigs.length] = extentConfigs[i];
- }
- return allConfigs;
- }
-
- protected String[] getExtentConfigs() {
- return new String[] {};
- }
- public void setUserDAO(UserDAO userDAO) {
- this.userDAO = userDAO;
- }
- }
|