Nhibernate+sqlite測試實戰經驗分享
-
Upload
wade-huang -
Category
Technology
-
view
1.676 -
download
1
Transcript of Nhibernate+sqlite測試實戰經驗分享
個人介紹
Wade 黃偉榮
2011 C# MVP
TW MVC 創辦人之一
[點部落]黃偉榮的學習筆記
www.dotblogs.com.tw/wadehuang36/
2
單元測試?
什麼是單元測試? 驗證程式的行為與期望是一致
為什麼要寫單元測試? 保證自己寫的程式沒有問題
回歸測試? 原有功能在修改後是否保持完整
單元測試無法測試出? UI
商業邏輯 整體效能等等
4
曾經嘗試過那些方法
解耦合到受測Method資料來源完全使用參數傳遞
自己寫DAO 使用DataSet
使用測試資料庫,建snapshot
使用Entity Framework時使用Mock DataContext
使用NHibernate+Sqlite
6
Entity Framework Mock Context
黃偉榮的學習筆記:使用ContextMock以不連結資料庫的方式做單元測試13
使用測試資料庫,建snapshot
CREATE DATABASE TestExamDb__SS_1
ON ( ) AS SNAPSHOT OF TestExamDb;
RESTORE DATABASE TestExamDb FROM
DATABASE_SNAPSHOT = ‘ExamDb_SS_1‘;
有一個很大的缺點,測試Method多,很容易因為Lock而失敗。
14
Code First
ORM的Model有幾種設計方式 Database First
Model First
Code First
○ Entity Framework 4.1 +
○ NHibernate 3.2 +
Model/Code First都有一個特性,一開始都沒有Database, Database是動態產生的,所以可以每一次測試都產生新增Database與新增測試資料。
15
二種策略
產生很多*.db檔,執行時複製檔案 適合資料量大 缺點:Schema或測試資料異動時很麻煩
NhibernateTestHelper.Copy(fileName)
使用Create Schema與初始化資料 Schema或測試資料異動時較方便 缺點:資料量大時測試時間會加長
NhibernateTestHelper.CreateSchema(iniClass[])
17
單元測試的一些小技巧
Moles - Isolation framework for .NET 亂數
日期
Mock Moq
寄Email(Call INotifyService)
訂單執行刷卡服務(IOrderService Call ICreditService)
19