【參考】http://code.google.com/p/ndbunit/wiki/QuickStartGuide
簡介:NDbUnit用於.net的數據庫unit-testing 框架。在測試前和運行測試間將你的數據 庫放進一個已知狀態。
在進行單元測試中集成NDBUnit需要以下幾個步驟:
1,下載NDbUnit.Core.dll 並添加引用到你的項目中
2,創建一個.NET XSD文件(dataset schema definition),並將你數據庫中的表添加進 來
3,在創建一個XML文件,它包含了你要通過NDbUnit加載的數據
4,通過NDbUnit方法控制你在進行測試時的數據庫狀態
示例:
准備:在你的數據庫中創建一個表Customer,腳本如下
CREATE TABLE [dbo].[Customer](
[CustomerId] [int] IDENTITY(1,1) NOT NULL,
[Firstname] [varchar](50) NULL,
[Lastname] [varchar](50) NULL,
CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED
(
[CustomerId] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
) ON [PRIMARY]
GO
然後進行一下操作:
1,新建工程,並引用NDBUnit.Core.dll
2,新建一個DataSet,命名為MyDataset.xsd,並通過Server Explorer將表Customer拖到 MyDataset中(TableAdapter可以刪除,MyDataset相關的文件,除MyDataset.xsd以外都可以 刪除)。
3,新建一個XML文件,命名為Customer.xml。添加以下內容:
<?xml version="1.0" encoding="utf-8" ?>
<MyDataset xmlns="http://tempuri.org/MyDataset.xsd">
<Customer>
<CustomerId>1</CustomerId>
<Firstname>John</Firstname>
<Lastname>Doe</Lastname>
</Customer>
<Customer>
<CustomerId>2</CustomerId>
<Firstname>Sam</Firstname>
<Lastname>Smith</Lastname>
</Customer>
<Customer>
<CustomerId>3</CustomerId>
<Firstname>Liu</Firstname>
<Lastname>RanJun</Lastname>
</Customer>
</MyDataset>
這時,所有的准備條件都已經准備好了,接下來就可以編寫NDbUnit方法了。
4,先要添加NUnit.Framework.dll類庫,代碼如下:
using System; using System.Collections.Generic; using System.Text; using NUnit.Framework; using NDbUnit.Core; namespace NDbUnitDemo { [TestFixture] public class Tests { private string connectionString; private NDbUnit.Core.INDbUnitTest mySqlDatabase; [TestFixtureSetUp] public void TestSetupFixture() { //初始化 connectionString = @"Server=LIURJ\MYDATABASE;user=sa;password=sa;initial catalog=demo;"; mySqlDatabase = new NDbUnit.Core.SqlClient.SqlDbUnitTest(connectionString); mySqlDatabase.ReadXmlSchema(@"..\..\MyDataset.xsd"); mySqlDatabase.ReadXml(@"..\..\bin\debug\testdata.xml"); } [SetUp] public void Setup() { //清除後插入數據 mySqlDatabase.PerformDbOperation(NDbUnit.Core.DbOperationFlag.CleanInsertIdentity); } [Test] public void Test() { //單元測試,判斷數據庫中Customer的記錄數 CustomerRespository respository = new CustomerRespository(); Assert.AreEqual(2, respository.GetAllCustomers().Count); } [TestFixtureTearDown] public void TestFixtureTearDown() { //刪除數據 mySqlDatabase.PerformDbOperation(NDbUnit.Core.DbOperationFlag.DeleteAll); } } }
就是這樣一個過程,我們在執行單元測試前就先將數據庫恢復到我們預期的那個狀態了。
這樣很好,但是有人就想,數據存放在xml中,如果是手動去編寫的話,對呀數據量很大 就顯得很不現實。
不要擔心,NDbUnit也為我們提供了方法,這樣就很方便的創建出測試數據了。
connectionString = "server=localhost;user=dbuser;password=dbpassword;initial catalog=MyDatabase;";
_mySqlDatabase = new NDbUnit.Core.SqlClient.SqlDbUnitTest (_connectionString);
_mySqlDatabase.ReadXmlSchema(@"..\..\MyDataset.xsd");
System.Data.DataSet ds = _mySqlDatabase.GetDataSetFromDb();
ds.WriteXml("TestData.xml");
如果默認情況下,表Customer包含數據的話,通過執行完上面的代碼後,xml文件 TestData.xml就包含了數據庫中表Customer的原有的數據了。
出處:http://www.cnblogs.com/icebutterfly/