love fish大鵬一曰同風(fēng)起,扶搖直上九萬(wàn)里

          常用鏈接

          統(tǒng)計(jì)

          積分與排名

          friends

          link

          最新評(píng)論

          Spring+hibernate 單元測(cè)試框架總結(jié) (轉(zhuǎn))

          ?
          這兩天的花費(fèi)了一些時(shí)間在使用spring-mock進(jìn)行spring的單元測(cè)試問(wèn)題上,基本上對(duì)這個(gè)問(wèn)題有了一個(gè)完整的解決方案
          下面將對(duì)相關(guān)學(xué)習(xí)到和思考到的一些問(wèn)題進(jìn)行一下整理:
          1、首先明確一下問(wèn)題:要對(duì)什么進(jìn)行單元測(cè)試?
          我的問(wèn)題是圍繞這一個(gè)DAO展開(kāi),我定義了一個(gè)DAO接口XXXDAO,并且寫(xiě)了該DAO的實(shí)現(xiàn)XXXDAOImpl,然后使用spring對(duì)接口的實(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)在問(wèn)題開(kāi)始明確了,我要對(duì)XXXDAOImpl進(jìn)行單元測(cè)試。這里需要指明一個(gè)問(wèn)題就是單元測(cè)試,測(cè)試的是有實(shí)現(xiàn)代碼的實(shí)現(xiàn)類,而不是接口。

          2、接著是下一個(gè)問(wèn)題,如何取得Sping的上下文關(guān)系呢?
          這里就需要用到spring-mock了,其中有一個(gè)測(cè)試基類是AbstractTransactionalDataSourceSpringContextTests
          我讓測(cè)試用例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的上下文信息,這樣的話這個(gè)測(cè)試用例就可以直接使用spirng中定義的bean了
          但是這里需要注意一個(gè)問(wèn)題*,就是文件路徑的問(wèn)題,這里為了能夠清楚地說(shuō)明文件的路徑規(guī)則我引用了spring-mock官方的getConfigLocation方法說(shuō)明
          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 好了,該到最后一個(gè)問(wèn)題了,取得Spirng上下問(wèn)中定義的bean的實(shí)例來(lái)進(jìn)行單元測(cè)試
          這里有兩種方法,一種是定義一個(gè)代測(cè)單元的對(duì)象,然后定義好get,set方法,AbstractTransactionalDataSourceSpringContextTests會(huì)自動(dòng)根據(jù)Spring的上下文得到待測(cè)單元的具體實(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");

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



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


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

          可以看到下面的pagebean和jsp頁(yè)面以及相關(guān)的taglib的單元測(cè)試我還沒(méi)有完成:),我將在今后幾天繼續(xù)研究相關(guān)的單元測(cè)試問(wèn)題

          posted on 2006-09-01 13:43 liaojiyong 閱讀(563) 評(píng)論(0)  編輯  收藏 所屬分類: Spring

          主站蜘蛛池模板: 崇阳县| 梨树县| 新乡市| 石台县| 静宁县| 龙海市| 隆安县| 论坛| 峡江县| 内黄县| 文昌市| 濮阳县| 满洲里市| 军事| 苍梧县| 富民县| 西充县| 牙克石市| 镇坪县| 家居| 雷波县| 壤塘县| 平果县| 磐安县| 绥滨县| 安溪县| 旅游| 荥阳市| 封丘县| 册亨县| 汉源县| 嘉定区| 宣化县| 吉首市| 斗六市| 沿河| 诸暨市| 城口县| 维西| 广安市| 应用必备|