小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

再討論spring的單元測試

 wangxq 2011-09-19

在我以前一篇文章關(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測試基類

  1. public abstract class AbstractDAOTestCase extends
  2.         AbstractDependencyInjectionSpringContextTests {
  3.     public AbstractDAOTestCase() {
  4.         this.setAutowireMode(AUTOWIRE_BY_NAME);
  5.     }
  6.     @Override
  7.     protected String[] getConfigLocations() {
  8.         String[] baseConfigs = new String[]{ "/spring/applicationContext.xml" };
  9.         String[] extentConfigs = getExtentConfigs();
  10.         int length = baseConfigs.length + extentConfigs.length;
  11.         String[] allConfigs = new String[length];
  12.         for (int i = 0; i < baseConfigs.length; i++) {
  13.             allConfigs[i] = baseConfigs[i];
  14.         }
  15.         for (int i = 0; i < extentConfigs.length; i++) {
  16.             allConfigs[i + baseConfigs.length] = extentConfigs[i];
  17.         }
  18.         return allConfigs;
  19.     }
  20.     //開發(fā)人員可以覆蓋這個方法,添加自己的配置文件
  21.     protected String[] getExtentConfigs() {
  22.         return new String[] {};
  23.     }
  24. }

Service測試基類

  1. public abstract class AbstractServiceTestCase extends
  2.         AbstractTransactionalDataSourceSpringContextTests {
  3.     protected UserDAO userDAO;
  4.     public AbstractServiceTestCase() {
  5.         this.setAutowireMode(AUTOWIRE_BY_NAME);
  6.     }
  7.     @Override
  8.     protected String[] getConfigLocations() {
  9.         String[] baseConfigs = new String[] { "spring/applicationContext.xml",
  10.                 "spring/applicationContext-transaction.xml",
  11.                 "org/codehaus/xfire/spring/xfire.xml",
  12.                 "spring/applicationContext-xfire.xml",
  13.                 "spring/applicationContext-osworkflow.xml",
  14.                 "spring/platform/*.xml" };
  15.         String[] extentConfigs = getExtentConfigs();
  16.         int length = baseConfigs.length + extentConfigs.length;
  17.         String[] allConfigs = new String[length];
  18.         for (int i = 0; i < baseConfigs.length; i++) {
  19.             allConfigs[i] = baseConfigs[i];
  20.         }
  21.         for (int i = 0; i < extentConfigs.length; i++) {
  22.             allConfigs[i + baseConfigs.length] = extentConfigs[i];
  23.         }
  24.         return allConfigs;
  25.     }
  26.     //開發(fā)人員可以覆蓋這個方法
  27.     protected String[] getExtentConfigs() {
  28.         return new String[] {};
  29.     }
  30.     public void setUserDAO(UserDAO userDAO) {
  31.         this.userDAO = userDAO;
  32.     }
  33. }

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多