<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

    主站蜘蛛池模板: 最近最新高清免费中文字幕| 久久久精品国产亚洲成人满18免费网站 | 国产一级理论免费版| 亚洲最大的成人网| 性盈盈影院免费视频观看在线一区| 亚洲第一成年人网站| 美女视频黄频a免费观看| 在线观看免费精品国产| 日韩精品亚洲专区在线影视| 免费中文字幕在线| 成av免费大片黄在线观看| 国产国拍亚洲精品mv在线观看| 男人都懂www深夜免费网站| 久久狠狠高潮亚洲精品| 免费看成人AA片无码视频羞羞网| 日本亚洲免费无线码 | 亚洲免费一区二区| 亚洲产国偷V产偷V自拍色戒| 99爱在线观看免费完整版| 亚洲成人黄色在线| 好男人视频社区精品免费| 国产精品亚洲а∨无码播放不卡| 亚洲男人第一无码aⅴ网站| 亚洲综合精品第一页| 免费大黄网站在线观看| 97国免费在线视频| 亚洲xxxxxx| 亚洲日韩在线第一页| 久久久精品2019免费观看| 亚洲色欲色欲www在线播放| 亚洲中久无码不卡永久在线观看| 免费国产成人18在线观看| 亚洲综合成人婷婷五月网址| 免费成人av电影| 96免费精品视频在线观看| 亚洲av乱码一区二区三区按摩| 亚洲无av在线中文字幕| 日韩毛片免费无码无毒视频观看| 亚洲av成人无码久久精品| 成人免费区一区二区三区| 亚洲精品亚洲人成在线播放|