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

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

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

    風人園

    弱水三千,只取一瓢,便能解渴;佛法無邊,奉行一法,便能得益。
    隨筆 - 99, 文章 - 181, 評論 - 56, 引用 - 0
    數據加載中……

    Spring2.0--單元測試要點

    今天復習了一下 造福無數人Spring2.0 參考手冊中文翻譯--第8章 測試,濃縮即精華的更新了SpringSide wiki中的--Spring下的單元測試要點

    ???? 注意,文檔還在不斷修改中,建議直接看Wiki 上的最新版本

    1. 需要Spring 依賴注入的測試

    ???為了測試Spring管理下的Bean,可以自行構造BeanFactory,也可以繼承于AbstractDependencyInjectionSpringContextTests,實現public String[] getConfigLocations()函數, 返回applicationContext文件路徑的數組。

    ?protectedString[] getConfigLocations() {??????? returnnewString[]{"classpath*:spring/*.xml",  "classpath*:spring/test/*.xml"};?}?

    ??并顯式寫一些需要注入的變量的setter函數。

    ??? tips1:此基類有一個applicationContext的成員變量,所以除了依靠setter注入外,還可以隨時用applicationContext.getBean() 取出所需的bean。?

    ??? tips2:注意此基類 默認是autowire by type的,所以如果context文件里有兩個相同類型的Bean就會報錯,可能需要在getConfigLocations()函數里,setAutowireMode(AUTOWIRE_BY_NAME);把它設回by name,或者取消setter函數,自行用applicationContext.getBean()來顯式查找Bean。

    2. Dao測試

    AbstractTransactionalDataSourceSpringContextTests 繼承于AbstractDependencyInjectionSpringContextTests,除了擁有上類的能力外,還管理了每個測試的事務,會在每個測試后默認回滾所有的操作。

    深層解釋:此類的實現其實依賴于Application Context中定義的 PlatformTransactionManager。由于使用了Autowrie by type,可以任意取名。

    ???????? 另依賴于Application Context中定義的DataSource,同樣可以任意取名。?

    tips1:如果需要在測試后提交,需要setRollBack(false); 或者調用setComplete()

    tips2:此基類還通過注入的DataSource創建了一個JDBCTemplate 變量,可以跑SQL幫忙核對Hibernate的結果,Spring將確保該查詢在同一個事務內執行。為正常工作你需要告訴你的ORM工具'刷新'它的已改變內容,例如使用Hibernate Session 接口的 flush() 方法。

    tips3:除了tips2以外,還有countRowsInTable(String?tableName),deleteFromTables(String[]?names) ,executeSqlScript(String?sqlResourcePath, boolean?continueOnError)三個簡便函數。

    3. Controller測試

    Controller測試一般要用MockObject 分離Service層,要copy WEB-INF/下的相關文件copy 到classpath,而且Controller不含太多的邏輯,所有測試controller有點吃力不討好,建議直接用Selenium進行集成測試,見(Selenium測試概述)。

    4.SpringSide里的測試

    因為Spring默認的基類名字較長,SpringSide 在core 的org.springside.core.test 中重新繼承了它們,并提供了默認讀取所有按springside 文件存放規則存放的context 文件的getConfigLocations()函數。

    默認讀取所有context文件的getConfigLocations()函數對速度和測試的隔離化都有影響,可以在子類重新實現。不過自己重新一個個寫相關context文件也好煩,而且其實在全lazy-load的情況下,速度也還可以接受。如何取舍要自己平衡了。

    對于CRUD的測試,在helloworld示例里的變量名都作了泛化,可以快速copy到另一個測試里。

    另外,留意resources/spring/test 下的文件,利用了Spring的PropertyOverrideConfigurer,新設定測試時的ApplicatonContext 里各個Bean的屬性如指定測試用的DataSource,詳細用法見Spring配置要點

    posted on 2007-02-08 17:11 風人園 閱讀(692) 評論(0)  編輯  收藏 所屬分類: Spring

    主站蜘蛛池模板: 成人久久免费网站| 亚洲av无码成人精品区一本二本 | 国产在线观看xxxx免费| 日韩在线a视频免费播放| 77777午夜亚洲| 免费毛片在线播放| 亚洲.国产.欧美一区二区三区| 永久黄网站色视频免费观看| 亚洲国产精品成人综合色在线| 国产人成免费视频| 牛牛在线精品观看免费正| 亚洲精品无码99在线观看 | 青娱乐在线免费观看视频| 免费真实播放国产乱子伦| 黄床大片30分钟免费看| 最新精品亚洲成a人在线观看| 91免费在线视频| 亚洲综合色一区二区三区小说| 国产在线观看麻豆91精品免费| 亚洲综合色丁香婷婷六月图片 | 亚洲爆乳精品无码一区二区| 四虎永久免费地址在线观看| 一区二区在线视频免费观看| 亚洲va无码va在线va天堂| 2020因为爱你带字幕免费观看全集| 亚洲乱码一区av春药高潮| 最新69国产成人精品免费视频动漫| 一本一道dvd在线观看免费视频| 亚洲AV乱码久久精品蜜桃| 国语成本人片免费av无码| 国产亚洲精品美女久久久久| 亚洲日本va中文字幕久久| 午夜免费福利小电影| 亚洲人AV在线无码影院观看| 亚洲综合另类小说色区色噜噜| 一级毛片免费播放| 亚洲大尺度无码无码专线一区| 亚洲AV无码欧洲AV无码网站| 亚洲欧洲免费无码| 中文字幕av免费专区| 亚洲熟妇自偷自拍另欧美|