<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-55  評(píng)論-208  文章-0  trackbacks-0
    這兩天的花費(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-08-25 00:29 rocket 閱讀(6246) 評(píng)論(4)  編輯  收藏

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产V亚洲V天堂无码久久久| 蜜臀AV免费一区二区三区| 未满十八私人高清免费影院| 亚洲精品无码少妇30P| 亚洲精品无码你懂的| 亚洲欧美自偷自拍另类视| 亚洲乱码无人区卡1卡2卡3| 亚洲人成网亚洲欧洲无码| 亚洲色偷偷综合亚洲av78| 亚洲精华国产精华精华液好用| 亚洲精品美女久久久久久久| 中文字幕亚洲情99在线| 亚洲欧美精品午睡沙发| 亚洲欧美在线x视频| 无遮挡国产高潮视频免费观看| 一级毛片在线播放免费| 男女一边摸一边做爽的免费视频 | 亚洲精品V欧洲精品V日韩精品 | 国产香蕉九九久久精品免费| 手机在线看永久av片免费| 精品国产免费一区二区| 亚洲AV无码一区二三区| 亚洲无人区一区二区三区| 久久久久亚洲Av片无码v| 亚洲成人高清在线观看| 亚洲熟女乱色一区二区三区| 麻豆安全免费网址入口| 中文在线观看永久免费| 中国xxxxx高清免费看视频| 久久久久国色AV免费观看性色| 青青草国产免费久久久下载| 亚洲 国产 图片| 亚洲毛片在线观看| 中文字幕无码亚洲欧洲日韩| 老司机午夜免费视频| 免费h视频在线观看| 免费精品人在线二线三线区别| 又粗又大又猛又爽免费视频| 亚洲精品无码乱码成人| 亚洲六月丁香六月婷婷蜜芽| 国产精品亚洲专区无码唯爱网|