資料庫單元測試最大的痛點在於「狀態隔離」:每次測試前需確保資料庫處於已知狀態,測試後需還原。NDbUnit 正是為此而生的 .NET 框架,它能在測試前後自動將資料庫重置為預設快照,讓測試真正做到獨立、可重複。
NDbUnit.Core.dll[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 | 僅插入,不清理現有資料 |
var ds = db.GetDataSetFromDb(); // 讀取目前資料庫資料到 DataSet
ds.WriteXml("TestData.xml"); // 序列化為 XML,作為基準快照
此功能解決了「大量測試資料手工編寫 XML 不現實」的問題,讓團隊可從正式環境(或開發資料庫)快速導出基準資料集。
testdata.basic.xml, testdata.edge.xml)