隨著單元測試的數量越來越多,而且在公司裡所開發的專案大部分還是使用 Dapper 來存取資料,所以 Repository 的單元測試就開始暴增,原本使用 CSV 檔案來匯入測試資料到 LocalDB 的前置作業就會成為讓整體測試作業執行時間緩慢的原因之一。
為了解決使用 CSV 檔案匯入測試資料會因為資料轉換而使得測試時間拉長的情況,所以乾脆使用 SQL Dumper 及 ApexSQL Script 工具匯出 SQL Script 來直接匯入測試資料。
SQL Server Dumper
這篇先不講怎麼在單元測試類別裡怎麼匯入測試資料到 LocalDB 裡,先講使用 SQL Dumper 這個工具匯出 SQL Script,SQL Dumper 這工具已經很久了,第一次看到是 2009 年在黑大的部落格裡所看到的「好用的SQL Dumper - 黑暗執行緒 」,真的是相當久了,而且久到現在連 SQL Dumper 的官網都已經不見了,我手邊所使用的版本就是從以前一直用到現在,所以軟體的載點就請各位找一找吧,我這邊就不提供。
我手邊的版本為 3.0.8
匯出本機電腦 SQL Server Express 裡 Northwind 的 Customers 表格的全部資料
匯出的 Script 內容
依據自訂的 T-SQL Query Expression 匯出資料
ApexSQL Script
如果你不想使用 SQL Dumper 的話,可以使用像是 ApexSQL Script 這樣的工具,不過 ApexSQL Script 這是一套需要花錢買的工具…
https://www.apexsql.com/sql_tools_script.aspx
為什麼會突然寫出這麼一篇文章呢?而且所提到的工具與方法還是蠻久以前就已經很多人介紹過的…
一開始有說過,其實我在 Service 或 Repository 的單元測試裡有時會需要使用到測試資料,有些可以是先以假資料來替代,而有些可以使用 AutoFixture 套件來產生測試用的類別資料(這以後會寫文章介紹),但有些情境的測試資料還是必須要一份真實的資料才可以,例如一些固定且變動性不大的資料,而這些資料大部分都是存放在資料庫裡,之前使用的是「輸出測試用資料的 CSV 檔案 - 使用 LINQPad, AutoMapper, CsvHelper」這篇文章裡的做法,但是隨著單元測試的數量增加,每次測試執行時就會有相當頻繁的資料讀取、轉換、匯入的操作,都會增加全部測試執行的時間。
而且匯出 CSV 資料的過程與需要注意的地方還真的蠻多的,而且操作過程還頗為麻煩(我自己都覺得了煩了,更何況是其他的同事與其他的工程師),所以最直接也最直覺的做法還是從資料庫匯出一份 Insert Data 的 SQL Script,然後在單元測試類別裡再執行匯入就可以(匯入的過程也更為直接)。
所以下次我會先介紹使用怎麼在單元測試裡使用 LocalDB,以及再寫一篇文章說明「輸出測試用資料的 CSV 檔案 - 使用 LINQPad, AutoMapper, CsvHelper」這篇文章裡最後所匯出的資料怎麼在單元測試裡匯入到 LocalDB 裡,最後再寫一篇單元測試裡使用 Insert Data SQL Script 匯入測試資料到 LocalDB。
以上
純粹是在寫興趣的,用寫程式、寫文章來抒解工作壓力