2015年10月30日 星期五

[ 單元測試 ] 在單元測試裡面使用Localdb

   在單元測試實作的過程中,隨著經驗的累績,發現很常要做一些假資料,但是這些回傳的假資料,如果用Hard Code的方式放在程式碼裡面,一方面是不好看,二來是不見得好維護。再來也許需要多種不同的Input,提升測試的品質,這些時候都會想到「如何更有效率的提升測試品質(效率)」,一開始我想到的是用Sqlite,簡單、且輕量化的他,其實在做很多小東西的時候都會仰賴他,但是在設定資料上,仍覺得他畢竟還是沒有SSMS來得方便及習慣。

  在之前的專案中,我對Localdb有了些比較深入的瞭解,也覺得如果走MS-SQL,不用這套簡直太可惜了,所以這邊簡單的分享一下可能會遇到的問題跟做法。



  建立完單元測試專案後在裡面新增了一個「服務架構資料庫」(*.mdf),這個檔案是我們用來做單元測試的資料。


  建立完後,很開心的在專案上點擊兩次檔案,希望編輯資料庫內容,可是你會看到像這樣的結果。


  WTF~!?跟平時的結果完全不太一下,這邊有兩個做法,其一是開另一類別庫專案,由該類別庫來管理維護DB,這個做法可以讓你完全不用離開VS (  詳細請參考: mrkt 的程式學習筆記 測試專案使用 LocalDB - 使用 Entity Framework 的情境 )

  但是因為我個人不喜歡vs提供的操作方式,我還是比較喜歡SSMS所以,這邊提供ssms的作法。

   首先開啟「SQL Server 2014 Management Studio」接著連接到Localdb。最後在「資料庫」上點擊右鍵後選擇「附加」指定你的mdf檔後就可以直接用ssms進行操作!

  
  在你建立好測試資料後,這時候如果你直接執行你的單元測試,那肯定會失敗的,因為這個時候你的mdf正附加在localdb上頭,所以無法搬移檔案,也就在單元測試期間會出錯,解決的辦法非常的簡單,就是…再「缷離」他就可以了


  另外可能會覺得「localdb,打開的時候看到一堆db感覺很不好!」,我個人的解決辦法是,每次執行前都跑bat,將測試用的執行個體都刪掉,然後再重新建立一個,語法大概如下:


  sqllocaldb p ["instance name"]
  sqllocaldb d ["instance name"]
  sqllocaldb c ["instance name"]
  sqllocaldb s ["instance name"]

  以上簡單的分享。

沒有留言:

張貼留言