Más contenido relacionado
La actualidad más candente (14)
Similar a Nhibernate+sqlite測試實戰經驗分享 (20)
Nhibernate+sqlite測試實戰經驗分享
- 2. 個人介紹
Wade 黃偉榮
2011 C# MVP
TW MVC 創辦人之一
[點部落]黃偉榮的學習筆記
www.dotblogs.com.tw/wadehuang36/
2
- 3. 大綱
簡單介紹單元測試
單元測試困難的地方,與操作經驗
NHibernate+Sqlite幫我決解那些問題
3
- 4. 單元測試?
什麼是單元測試?
驗證程式的行為與期望是一致
為什麼要寫單元測試?
保證自己寫的程式沒有問題
回歸測試?
原有功能在修改後是否保持完整
單元測試無法測試出?
UI
商業邏輯
整體效能等等
4
- 5. 單元測試困難的地方?
程式的耦合度不能太高
每一個Method處理的事務不能太大
測試資料的準備
• 考試成績計算
• 購物車折扣計算
• 排行計算
5
- 6. 曾經嘗試過那些方法
解耦合到受測Method資料來源完全使用參數傳遞
自己寫DAO 使用DataSet
使用測試資料庫,建snapshot
使用Entity Framework時使用Mock DataContext
使用NHibernate+Sqlite
6
- 10. 自己寫DAO
資料存取層 DB
資料存取層
呈現層 邏輯層 DataSet
(For 測試)
使用IoC切換
10
- 15. Code First
ORM的Model有幾種設計方式
Database First
Model First
Code First
○ Entity Framework 4.1 +
○ NHibernate 3.2 +
Model/Code First都有一個特性,一開始都
沒有Database, Database是動態產生的,
所以可以每一次測試都產生新增Database與
新增測試資料。
15
- 16. 用NHibernate+Sqlite的好處
NHibernate的特色
支援的DB多
Map彈性大
Event
Cache
Log
HQL與SQL支援
Sqlite的特色
對測試的便利性
16
- 17. 二種策略
產生很多*.db檔,執行時複製檔案
適合資料量大
缺點:Schema或測試資料異動時很麻煩
NhibernateTestHelper.Copy(fileName)
使用Create Schema與初始化資料
Schema或測試資料異動時較方便
缺點:資料量大時測試時間會加長
NhibernateTestHelper.CreateSchema(iniClass[])
17
- 18. 使用的單元測試工具
• Microsoft Visual Studio Unit Testing
18
- 19. 單元測試的一些小技巧
Moles - Isolation framework for .NET
亂數
日期
Mock
Moq
寄Email(Call INotifyService)
訂單執行刷卡服務
(IOrderService Call ICreditService)
19