測試

          1、測試數(shù)據(jù)/運行數(shù)據(jù)的互不影響
                在做測試時,通常都需要生成測試數(shù)據(jù),在測試運行完后又要進行測試數(shù)據(jù)的刪除工作,當測試和運行用的是同一個庫的情況下就很容易出現(xiàn)測試數(shù)據(jù)和運行數(shù)據(jù)互相影響的現(xiàn)象,這個時候在寫測試的時候就要特別的注意了,既不能讓運行數(shù)據(jù)影響了測試的結(jié)果,又不能讓測試數(shù)據(jù)影響到了運行數(shù)據(jù)。
                通常來說,為了解決這個問題,會采用測試庫和運行庫分開的方式,采取這種方式的情況下就比較簡單了,不過有些時候還是挺麻煩的,畢竟要創(chuàng)建數(shù)據(jù)、刪除數(shù)據(jù)。
                還有一種特殊的情況,例如一個這樣的項目:
                項目已經(jīng)上線運行了,這個時候做了一個新的流程,在部署了新的流程到運行環(huán)境后,通常需要在運行環(huán)境中測試一下,這個時候問題就出現(xiàn)了,測試數(shù)據(jù)和運行數(shù)據(jù)并行,這個時候就要充分的考慮測試數(shù)據(jù)和運行數(shù)據(jù)的互不影響。
                當然,上面的項目的情況是一個比較特殊的情況,就像icecloud說的,項目規(guī)劃的好的話是會有測試環(huán)境和運行環(huán)境的不同的,測試環(huán)境需要和運行環(huán)境完全一致,在有新增的東西需要部署到運行環(huán)境時先在測試環(huán)境進行測試,測試沒問題后再通過升級腳本部署到運行環(huán)境中。
                這些方法確實是可以解決測試數(shù)據(jù)/運行數(shù)據(jù)的互相影響的問題,不過覺得還是有些的麻煩,覺得如果有一個工具可以幫忙避免測試數(shù)據(jù)/運行數(shù)據(jù)的互相影響,同時又可以讓你在寫測試的時候很容易的創(chuàng)建測試數(shù)據(jù),又不用擔心其他測試數(shù)據(jù)或運行數(shù)據(jù)對它造成影響,最后測試數(shù)據(jù)又可以安全的被清除,^_^,有個這樣的工具就好了.........
                 或者說大家在實際中碰到測試數(shù)據(jù)/運行數(shù)據(jù)并行的情況下會怎么辦呢..
          2、單元測試
                一直以來都實行TDD,不過發(fā)現(xiàn)我做單元測試的方法仍然不正確,盡管在測試的基本原則---"測試一定情況下單元的執(zhí)行是否和預期一致"上是正確的,但進行單元測試的方法并不正確,就像robbin所說,我做的是集成測試,因為我做單元測試時會去把該單元依賴的其他的對象所需要的東西也去進行模擬,這樣說起來可能過于生澀了,舉個例子吧:
                有一個服務(wù)類,該服務(wù)類依賴一個Dao類,通過Dao從數(shù)據(jù)庫中獲取相關(guān)的信息后進行處理,我以前做單元測試的做法就是首先產(chǎn)生出測試數(shù)據(jù),由Dao先將測試數(shù)據(jù)進行持久,之后再通過調(diào)用服務(wù)類的方法去執(zhí)行,"一定的情況"通常都是由測試數(shù)據(jù)來控制,這點沒什么不對,就是控制所測試的單元的輸入。
                測試的基本原則都是檢查在一定的輸入的情況下輸出是否符合預期,作為單元測試而言上面的做法不正確的地方就是去產(chǎn)生測試數(shù)據(jù)并由Dao先持久,其實作為單元測試而言,只需要測試當前對象執(zhí)行的正確性,也就是說它已經(jīng)假設(shè)了它所依賴的其他的對象產(chǎn)生的結(jié)果,這樣的單元測試才是有意義的,而且也變得更容易寫了,之前我所采用的那種測試其實是集成測試....
                 這樣說了后其實就很容易理解單元測試了,仍然是上面的服務(wù)類,它的單元測試的寫法應該是去Mock出Dao執(zhí)行的結(jié)果,當然,這個時候就要模擬Dao在返回幾種情況下服務(wù)的執(zhí)行情況了,這個是正常的,就是去控制服務(wù)的輸入,^_^,這樣可以看到,其實在單元測試中是不會出現(xiàn)多少測試數(shù)據(jù)的情況的,除了Dao,而且也不用去關(guān)心其所依賴的對象的執(zhí)行的正確與否,以及所依賴的對象是不是還依賴別的對象,^_^,可以保證測試的范圍就是本單元。
                  這樣做的潛在好處還在于會促進面向接口的編程,^_^
          3、集成測試
                集成測試就是需要創(chuàng)建出所依賴的對象的環(huán)境的一種測試方法,其實在有了單元測試的情況下,集成測試就可以完全的從系統(tǒng)的入口進行測試,例如B/S系統(tǒng)來講,它的入口都是頁面,也就是我們可以通過頁面來進行測試,這個時候可以看到,測試數(shù)據(jù)的問題又產(chǎn)生了...
                當然,對于有些集成測試是需要編寫代碼的,這個時候就需要創(chuàng)建出入口對象所依賴的對象(以及它所依賴的對象)的環(huán)境,最后才能調(diào)用入口對象的方法進行測試,這樣就完成集成測試了。

          posted on 2006-03-08 13:20 BlueDavy 閱讀(1484) 評論(3)  編輯  收藏 所屬分類: Java

          評論

          # re: 測試 2006-03-08 16:05 GHawk

          我們的項目也正為測試的問題而焦頭爛額。對OO的誤解和缺乏接口設(shè)計,導致無法寫出簡單清晰的單元測試,現(xiàn)在的單元測試成了Bottom-Up的集成測試,而且在測試系統(tǒng)異常捕獲邏輯的時候無能為力……  回復  更多評論   

          # re: 測試 2006-03-08 22:37 BlueDavy

          恩,其實考慮測試就自然能改進設(shè)計,^_^,這也是TDD的本意!  回復  更多評論   

          # re: 測試 2006-03-09 13:21 lingate

          很好的短文,除了MOCK的方法以外,還可以使用,先將數(shù)據(jù)輸入數(shù)據(jù)庫或者表,然后導出一個數(shù)據(jù)庫或者表的備份,回頭在測試前將數(shù)據(jù)庫恢復到這個導出時狀態(tài)。并且可以根據(jù)測試不同要求建立不同的備份。  回復  更多評論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導航

          <2006年3月>
          2627281234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          統(tǒng)計

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 信宜市| 赣州市| 高青县| 奉节县| 太仓市| 吉水县| 堆龙德庆县| 沂源县| 涟水县| 玉田县| 新和县| 惠东县| 赤峰市| 富顺县| 四子王旗| 庆阳市| 讷河市| 红原县| 武强县| 洛宁县| 香格里拉县| 临邑县| 资中县| 当雄县| 阿图什市| 金华市| 蕉岭县| 南川市| 韩城市| 旬阳县| 安多县| 四川省| 东丰县| 宁海县| 容城县| 彰化市| 大新县| 桦甸市| 清原| 大冶市| 凌海市|