2016年10月31日 星期一

Repository 測試 - 使用 LocalDB - 範例程式碼 @ Github

將「Repository 測試 - 使用 LocalDB」這系列文章的範例程式碼給發佈到 Github 上面囉,完整的專案程式碼會比文章裡只有提到部分來得清楚(其實文章裡所提供的程式都已經是完整的內容),還是有很多開發者對於文字與部分程式的內容比較沒有感覺,所以有時間就把專案 Clone 一份下來看看。(還是有很多人習慣看程式,都已經把完整的專案公開了,就下載並且執行看看吧)

 


Repository 測試使用 LocalDB 範例程式碼

https://github.com/kevintsengtw/Repository_Test_with_LocalDB

image

 

部落格文章連結:

Repository 測試使用 LocalDB - Part.1

Repository 測試使用 LocalDB - Part.2

Repository 測試使用 LocalDB - Part.3

Repository 測試使用 LocalDB - Part.4

相關文章連結

Dapper 練習題 - 新增多筆或大量資料

Dapper - 使用 LINQPad 快速產生相對映 SQL Command 查詢結果的類別

使用 LINQPad 快速產生 Table 的 Insert Script

輸出測試用資料的 CSV 檔案 - 使用 LINQPad, AutoMapper, CsvHelper

編寫單元測試時的好用輔助套件 - Fluent Assertions

準備 Repository 單元測試的測試資料 - 產生匯入資料的 SQL Script

 

這邊還是要做個說明,這系列的文章內容是在說怎麼在 Repository 的單元測試專案裡使用 LocalDB 來完成單元測試,而不是在說 Repository 的單元測試就應該這麼做,絕對不是喔。資料存取層的單元測試做法有很多,而且要採用哪一種方式的主要影響是資料存取層裡所使用的操作方法,例如使用 Entity Framework Code First 進行資料的存取,就不必去另外處理 Create Table Schema。另外如果資料庫使用的不是 MS SQL Server 而是其他的 Database ( Oracle, MySQL … etc ),那麼使用 LocalDB 就沒有意義了。所以要怎麼做資料存取層的單元測試、用什麼方式進行,這就看各位開發團隊的共識而決定。

以我目前的開發經驗來說,我在做資料存取層單元測試的實作會比服務層的單元測試還要多,我在之前的文章裡也有說過,因為過往的程式都是顯示邏輯、商業邏輯、資料存取邏輯混雜的情況,所以在重構的時候會先花很多的時間去分析這些錯綜複雜的關係,先把資料存取的相關程式給分離出來,然後進行程式開發以及單元測試的實作,以往的程式太過於依靠執行 T-SQL 做為商業邏輯的處理,既使已經把很多商業邏輯處理的程式都移往服務層,但還是有很多原有的程式還是與 T-SQL 處理綁得很深,以致於我就要對這些 Repository 的程式作很多很多的單元測試。

 

要補充一下,我這系列文章裡會使用到 Entity Framework,我是用 EF 的方法去建立與移除 LocalDB,而不是說我將原本的 Repository 資料存取在單元測試裡改用 EF 的方式,不是!不是!不是!(因為就是有人誤會,所以要特別說出來),資料存取的方式還是不變(怎麼可能會變哩,實作程式用的是 Dapper,在單元測試裡也不可能改成使用 EF 呀),所以千萬不要自行腦補呀!

 


資料存取層的單元測試會需要花很多的時間以及很多的手段(?)做處理,所以會屬於比較進階的單元測試,假如你還在處於單元測試剛入門或還沒跨到進階的階段,那麼這一系列的文章就不適合(每次都會什麼文章或什麼技術還不適合那個階段的開發者,但說了等於沒說一樣,因為每次來問問題的人都是拿著進階的內容來問,但是看著他們的程式就讓人搖頭,很多都還是幼幼班程度而已,就想使用分層,新手班都還沒畢業,就已經在問 Unit of Work ? 要先搞清楚自己的程度呀)。

要進行單元測試前,你要先對於物件導向有所瞭解(三特性、兩抽象、五原則等),在還沒有基礎的情況下,要對新開發的專案或是既有的專案去做單元測試時,一定會遇到很大的困難,所以多多找人一起討論,而不是自己想破頭去做一些莫名其妙的解法,要不然就是多關注 SkillTree 的課程資訊。

 

相關主題

http://kevintsengtw.blogspot.tw/search/label/測試

 

以上

沒有留言:

張貼留言

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。