首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

NDbUnit 實戰:資料庫單元測試的「時光機」

     編輯:關於.NET

資料庫單元測試最大的痛點在於「狀態隔離」:每次測試前需確保資料庫處於已知狀態,測試後需還原。NDbUnit 正是為此而生的 .NET 框架,它能在測試前後自動將資料庫重置為預設快照,讓測試真正做到獨立、可重複。

核心工作流程四步驟

  1. 引用 NDbUnit.Core.dll
  2. 建立 XSD 結構描述(對應資料表結構)
  3. 準備 XML 測試資料(符合 XSD 結構)
  4. 在測試夾具中呼叫 NDbUnit API 控制資料庫狀態

完整範例:Customer 表測試

[TestFixture]
public class Tests {
    private INDbUnitTest db;
    
    [TestFixtureSetUp]
    public void Init() {
        string conn = @"Server=.;user=sa;password=sa;database=demo;";
        db = new SqlDbUnitTest(conn);
        db.ReadXmlSchema(@"..\..\MyDataset.xsd");
        db.ReadXml(@"..\..\testdata.xml");
    }
    
    [SetUp]
    public void Reset() => db.PerformDbOperation(DbOperationFlag.CleanInsertIdentity);
    
    [Test]
    public void Test_Customer_Count() {
        var repo = new CustomerRepository();
        Assert.AreEqual(3, repo.GetAll().Count); // XML 定義了 3 筆
    }
    
    [TestFixtureTearDown]
    public void Cleanup() => db.PerformDbOperation(DbOperationFlag.DeleteAll);
}

關鍵操作旗標解析

旗標行為
CleanInsertIdentity刪除所有資料 → 重新插入 XML 資料(保留 Identity 欄位值)
DeleteAll清空相關表資料
Insert僅插入,不清理現有資料

實用技巧:從現有資料庫反向生成測試 XML

var ds = db.GetDataSetFromDb(); // 讀取目前資料庫資料到 DataSet
ds.WriteXml("TestData.xml");    // 序列化為 XML,作為基準快照

此功能解決了「大量測試資料手工編寫 XML 不現實」的問題,讓團隊可從正式環境(或開發資料庫)快速導出基準資料集。

最佳實踐建議

  • 將 XSD/XML 納入專案版本控制,標記為「內容複製到輸出目錄」
  • 針對不同測試場景準備多組 XML(如 testdata.basic.xml, testdata.edge.xml)
  • 搭配 TransactionScope 實現更細粒度的測試隔離(需資料庫支援分散式交易)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved