隨筆-55  評論-208  文章-0  trackbacks-0
          這兩天的花費(fèi)了一些時(shí)間在使用spring-mock進(jìn)行spring的單元測試問題上,基本上對這個問題有了一個完整的解決方案
          下面將對相關(guān)學(xué)習(xí)到和思考到的一些問題進(jìn)行一下整理:
          1、首先明確一下問題:要對什么進(jìn)行單元測試?
          我的問題是圍繞這一個DAO展開,我定義了一個DAO接口XXXDAO,并且寫了該DAO的實(shí)現(xiàn)XXXDAOImpl,然后使用spring對接口的實(shí)現(xiàn)進(jìn)行管理:
          <bean id="XXXDAO" class="com.easou.datastat.base.dao.impl.XXXDAOImpl">
              
          <property name="sessionFactory">
                
          <ref bean="sessionFactory"/>
              
          </property>
              
          <property name="hibernateTemplate">
                
          <ref bean="hibernateTemplate"/>
              
          </property>
            
          </bean>

          現(xiàn)在問題開始明確了,我要對XXXDAOImpl進(jìn)行單元測試。這里需要指明一個問題就是單元測試,測試的是有實(shí)現(xiàn)代碼的實(shí)現(xiàn)類,而不是接口。

          2、接著是下一個問題,如何取得Sping的上下文關(guān)系呢?
          這里就需要用到spring-mock了,其中有一個測試基類是AbstractTransactionalDataSourceSpringContextTests
          我讓測試用例XXXDAOImplTestcase繼承AbstractTransactionalDataSourceSpringContextTests,然后override其中的方法getConfigLocations()
          具體代碼如下:
          public class XXXDAOImplTestCase extends AbstractTransactionalDataSourceSpringContextTests {

              
              @Override
              
          protected String[] getConfigLocations() {
                  
          // TODO get the spring context
                  
                  String[] config 
          = new String[]{"file:D:\\javawork\\workspace\\datastat\\docroot\\WEB-INF\\applicationContext.xml","file:D:\\javawork\\workspace\\datastat\\docroot\\WEB-INF\\applicationContext-base.xml"};
                  
                  
          return config;

              }

          }

          不難看出,該方法是為了讀入spring的上下文信息,這樣的話這個測試用例就可以直接使用spirng中定義的bean了
          但是這里需要注意一個問題*,就是文件路徑的問題,這里為了能夠清楚地說明文件的路徑規(guī)則我引用了spring-mock官方的getConfigLocation方法說明
          Subclasses must implement this method to return the locations of their config files. A plain path will be treated as class path location. E.g.: "org/springframework/whatever/foo.xml". Note however that you may prefix path locations with standard Spring resource prefixes. Therefore, a config location path prefixed with "classpath:" with behave the same as a plain path, but a config location such as "file:/some/path/path/location/appContext.xml" will be treated as a filesystem location.

          3 好了,該到最后一個問題了,取得Spirng上下問中定義的bean的實(shí)例來進(jìn)行單元測試
          這里有兩種方法,一種是定義一個代測單元的對象,然后定義好get,set方法,AbstractTransactionalDataSourceSpringContextTests會自動根據(jù)Spring的上下文得到待測單元的具體實(shí)現(xiàn)。
          private ExQueryDAO exQqueryDAO;
              
              
              
              
          /**
               * 
          @return 返回 exQqueryDAO。
               
          */

              
          public ExQueryDAO getExQqueryDAO() {
                  
          return exQqueryDAO;
              }



              
          /**
               * 
          @param exQqueryDAO 要設(shè)置的 exQqueryDAO。
               
          */

              
          public void setExQqueryDAO(ExQueryDAO exQqueryDAO) {
                  
          this.exQqueryDAO = exQqueryDAO;
              }


          另外一種就是使用applicationContext.getBean("XXXDAO");的方法取得實(shí)例
          XXXDAO xxxDAO = (XXXDAO)applicationContext.getBean("XXXDAO");

          接下來你就可以用這個bean的具體實(shí)現(xiàn)對相關(guān)方法進(jìn)行unittest了



          這里補(bǔ)充一個問題就是單元測試的運(yùn)行環(huán)境問題*,由于你可能在spring的配置文件中指定一些外部類所以你必須在junit的運(yùn)行環(huán)境中指定使用到的classpath,下面是eclipse的junit配置classpath
          junit-classpath.JPG


          最后我對整體的spring+hibernate的jsf框架進(jìn)行了一下單元測試的框架總結(jié),主要多了一個基本的BaseTestCase,用于統(tǒng)一讀取applicationContext
          單元測試框架.jpg

          可以看到下面的pagebean和jsp頁面以及相關(guān)的taglib的單元測試我還沒有完成:),我將在今后幾天繼續(xù)研究相關(guān)的單元測試問題
          posted on 2006-08-25 00:29 rocket 閱讀(6250) 評論(4)  編輯  收藏

          評論:
          # re: Spring+hibernate 單元測試框架總結(jié) 2006-08-25 08:55 | sjun
          不錯,畫的測試圖把測試過程描述得很清晰,頂一下!  回復(fù)  更多評論
            
          # re: Spring+hibernate 單元測試框架總結(jié)[未登錄] 2007-06-13 20:08 | Jack
          rocket 支持你。  回復(fù)  更多評論
            
          # re: Spring+hibernate 單元測試框架總結(jié) 2007-09-25 11:43 | cocin0923@sina.com.cn
          不錯,圖畫的不錯,一下就知道是咋回事了  回復(fù)  更多評論
            
          # re: Spring+hibernate 單元測試框架總結(jié) 2007-11-17 15:25 | 汪保杰(Jack)
          管理與技術(shù)群
          47763528
          請快加入,要滿了!  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 四子王旗| 东海县| 环江| 丰县| 西和县| 德钦县| 北京市| 武陟县| 耿马| 方正县| 云浮市| 贵阳市| 天水市| 永吉县| 政和县| 凤山县| 白水县| 铁岭市| 德安县| 东港市| 航空| 海林市| 剑河县| 兴宁市| 固镇县| 康平县| 南充市| 中江县| 新昌县| 麻栗坡县| 嘉祥县| 扶风县| 安庆市| 湘潭县| 海淀区| 太原市| 天台县| 和田县| 彰化市| 闵行区| 湘阴县|