正文

作者水平有限,如有錯誤或紕漏,請指出,謝謝。

回到頂部

背景介紹

最近在團隊在做release之前的regression,把各個feature分支merge回master之后發(fā)現DB的單元測試出現了20多個失敗的test cases。之前沒怎么做過DB的單元測試,正好借這個機會熟悉一下寫DB單元測試的流程。

這篇博文中首先介紹一下在我們的特定項目場景中是如何搭建DB 單元測試框架的,然后舉一個簡單的例子,從頭到尾在visual studio中創(chuàng)建一個簡單的單元測試工程。

我們開發(fā)的產品使用的數據庫為Sql Server,總共有400多張表,2000多個存儲過程,每個存儲過程都相當于應用代碼中的一個功能函數。代碼中的每個復雜的功能函數都可以通過寫單元測試來在一定程度上保證代碼質量,存儲過程也如此。代碼中的UT難點在于解耦,也就把相互牽連在一起的代碼彼此分離開來,各個擊破,例如A函數需要B函數提供的數據,測試A函數的時候我們只想測試A函數,不想調用B,這時候就需要我們自己提供B函數生成的數據。這叫做mock。

在做DB單元測試的時候,存儲過程所使用的數據比較特殊,都是持久化在數據庫表中的,2000多個存儲過程增刪改查400多個表,我們需要把這些表的數據為每個存儲過程做隔離,如果測試用例使用的數據相互之間關聯,恐怕會天下大亂,因為在一般情況下,單元測試用例的運行順序都是隨機的,如果單元測試使用的數據有關聯,很有可能兩次運行結果也是隨機的(但是有一種方法可以固定case執(zhí)行順序,我在最后的例子中進行說明),我們這次的20多個失敗的cases就有這種原因導致的,兩臺機器上跑出的結果不一樣,有的成功,有的失敗。

注:有關單元測試的定義,見另外一篇帖子,單元測試有毒

那么問題就來了,如何才能做數據的隔離呢?說一下我們的方案。

回到頂部

準備數據

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網站設計培訓,網站建設培訓學習是年輕人改變自己的最好方式