2016年10月16日 星期日

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

之前有介紹過一篇準備測試資料的文章「輸出測試用資料的 CSV 檔案 - 使用 LINQPad, AutoMapper, CsvHelper」,在大部分的情況下我蠻常使用這樣的操作方式來準備測試資料,但隨著單元測試的數量越來越多,而且因為在公司裡所開發的專案大部分還是使用 Dapper 來存取資料,所以 Repository 的單元測試就開始暴增,原本使用 CSV 檔案來匯入測試資料到 LocalDB 的前置作業就會成為讓整體測試作業執行時間緩慢的原因之一(有關怎麼使用 LocalDB 進行 Repository 單元測試與使用 CSV 檔匯入測試資料的內容,日後再寫篇文章來說明)。

為了解決使用 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

image

 

匯出本機電腦 SQL Server Express 裡 Northwind 的 Customers 表格的全部資料

image

匯出的 Script 內容

image

依據自訂的 T-SQL Query Expression 匯出資料

image

 

ApexSQL Script

如果你不想使用 SQL Dumper 的話,可以使用像是 ApexSQL Script 這樣的工具,不過 ApexSQL Script 這是一套需要花錢買的工具…

https://www.apexsql.com/sql_tools_script.aspx

image

 


為什麼會突然寫出這麼一篇文章呢?而且所提到的工具與方法還是蠻久以前就已經很多人介紹過的…

一開始有說過,其實我在 Service 或 Repository 的單元測試裡有時會需要使用到測試資料,有些可以是先以假資料來替代,而有些可以使用 AutoFixture 套件來產生測試用的類別資料(這以後會寫文章介紹),但有些情境的測試資料還是必須要一份真實的資料才可以,例如一些固定且變動性不大的資料,而這些資料大部分都是存放在資料庫裡,之前使用的是「輸出測試用資料的 CSV 檔案 - 使用 LINQPad, AutoMapper, CsvHelper」這篇文章裡的做法,但是隨著單元測試的數量增加,每次測試執行時就會有相當頻繁的資料讀取、轉換、匯入的操作,都會增加全部測試執行的時間。

而且匯出 CSV 資料的過程與需要注意的地方還真的蠻多的,而且操作過程還頗為麻煩(我自己都覺得了煩了,更何況是其他的同事與其他的工程師),所以最直接也最直覺的做法還是從資料庫匯出一份 Insert Data 的 SQL Script,然後在單元測試類別裡再執行匯入就可以(匯入的過程也更為直接)。

所以下次我會先介紹使用怎麼在單元測試裡使用 LocalDB,以及再寫一篇文章說明「輸出測試用資料的 CSV 檔案 - 使用 LINQPad, AutoMapper, CsvHelper」這篇文章裡最後所匯出的資料怎麼在單元測試裡匯入到 LocalDB 裡,最後再寫一篇單元測試裡使用 Insert Data SQL Script 匯入測試資料到 LocalDB。

 

以上

沒有留言:

張貼留言

提醒

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