【参考】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,脚本如下
Code
CREATETABLE[dbo].[Customer](
[CustomerId][int]IDENTITY(1,1)NOTNULL,
[Firstname][varchar](50)NULL,
[Lastname][varchar](50)NULL,
CONSTRAINT[PK_Customer]PRIMARYKEYCLUSTERED
(
[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。添加以下内容:
Code
<?xmlversion="1.0"encoding="utf-8"?>
<MyDatasetxmlns="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类库,代码如下:
Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingNUnit.Framework;
usingNDbUnit.Core;
namespaceNDbUnitDemo
{
[TestFixture]
publicclassTests
{
privatestringconnectionString;
privateNDbUnit.Core.INDbUnitTestmySqlDatabase;
[TestFixtureSetUp]
publicvoidTestSetupFixture()
{
//初始化
connectionString=@"Server=LIURJ\MYDATABASE;user=sa;password=sa;initialcatalog=demo;";
mySqlDatabase=newNDbUnit.Core.SqlClient.SqlDbUnitTest(connectionString);
mySqlDatabase.ReadXmlSchema(@"..\..\MyDataset.xsd");
mySqlDatabase.ReadXml(@"..\..\bin\debug\testdata.xml");
}
[SetUp]
publicvoidSetup()
{
//清除后插入数据
mySqlDatabase.PerformDbOperation(NDbUnit.Core.DbOperationFlag.CleanInsertIdentity);
}
[Test]
publicvoidTest()
{
//单元测试,判断数据库中Customer的记录数
CustomerRespositoryrespository=newCustomerRespository();
Assert.AreEqual(2,respository.GetAllCustomers().Count);
}
[TestFixtureTearDown]
publicvoidTestFixtureTearDown()
{
//删除数据
mySqlDatabase.PerformDbOperation(NDbUnit.Core.DbOperationFlag.DeleteAll);
}
}
}
就是这样一个过程,我们在执行单元测试前就先将数据库恢复到我们预期的那个状态了。
这样很好,但是有人就想,数据存放在xml中,如果是手动去编写的话,对呀数据量很大就显得很不现实。
不要担心,NDbUnit也为我们提供了方法,这样就很方便的创建出测试数据了。
Code
connectionString="server=localhost;user=dbuser;password=dbpassword;initialcatalog=MyDatabase;";
_mySqlDatabase=newNDbUnit.Core.SqlClient.SqlDbUnitTest(_connectionString);
_mySqlDatabase.ReadXmlSchema(@"..\..\MyDataset.xsd");
System.Data.DataSetds=_mySqlDatabase.GetDataSetFromDb();
ds.WriteXml("TestData.xml");
如果默认情况下,表Customer包含数据的话,通过执行完上面的代码后,xml文件TestData.xml就包含了数据库中表Customer的原有的数据了。
源码下载
分享到:
相关推荐
流程图 博文链接:https://cailin.iteye.com/blog/143116
http://www.cnblogs.com/not-code/archive/2011/07/16/2108369.html 成功解决asmack不能收发文件的问题 http://www.eoeandroid.com/forum.php?mod=viewthread&tid=81207 asmack :...
NULL 博文链接:https://dins.iteye.com/blog/454304
NULL 博文链接:https://zhanglimijavaeye.iteye.com/blog/1729615
webApi请求插件PostMan,请参考博客:http://www.cnblogs.com/chenwolong/p/PostMan.html。webApi请求插件PostMan,请参考博客:http://www.cnblogs.com/chenwolong/p/PostMan.html。webApi请求插件PostMan,请参考博客...
开发文档-ASP.NET:http://www.cnblogs.com/xproer/archive/2012/02/17/2355469.html 升级日志:http://www.cnblogs.com/xproer/archive/2012/02/17/2355449.html 示例下载:...
开发文档-PHP:http://www.cnblogs.com/xproer/archive/2011/05/16/2047915.html 开发文档-JSP:http://www.cnblogs.com/xproer/archive/2011/05/20/2051862.html 示例下载-标准版:...
存储过程版、EF框架版,详情请结合博客:http://www.cnblogs.com/chenwolong/p/BF.html 网址。 C#并发处理。存储过程版、EF框架版,详情请结合博客:http://www.cnblogs.com/chenwolong/p/BF.html 网址。 C#并发处理...
,C# 简单的作业调度,亦可参考博客:http://www.cnblogs.com/chenwolong/p/Job.html,C# 简单的作业调度,亦可参考博客:http://www.cnblogs.com/chenwolong/p/Job.html,C# 简单的作业调度,亦可参考博客:...
迭代模式 http://www.cnblogs.com/java-my-life/archive/2012/05/22/2511506.html 中介者模式 http://blog.csdn.net/chenhuade85/article/details/8141831 备忘录模式 ...
产品介绍:http://www.cnblogs.com/xproer/archive/2011/03/26/1996322.html 开发文档:http://www.cnblogs.com/xproer/archive/2011/03/26/1996371.html 升级日志:...
http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623594.html Lucene学习总结之二:Lucene的总体架构 http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623596.html Lucene学习总结之三:...
用SetupFactory打包MapX(带打好的包和打包文档以及录像) http://www.cnblogs.com/Tangf/archive/2006/02/05/325842.html ┕打包以及文档和录像:http://www.cnblogs.com/Files/Tangf/Mapx_Pack.rar 再谈MAPX打包以及...
这个项目可以考虑用在特定情况下加速加载无损格式的预览图,提升用户体验 该项目没有demo代码,demo代码可参考博客园的一位网友的文章:http://www.cnblogs.com/tntmonks/p/5143350.html 标签:无损图片
Proj.4的功能主要有经纬度坐标与地理坐标的转换,坐标系的转换,包括基准变换等。 下载也可直接使用git进行下载:git clone ...cmake下载与安装:https://www.cnblogs.com/chenyaling/p/10894084.html
转自:http://www.cnblogs.com/miro/p/4030622.html 整理到了doc文档里,内含代码。 方便一起学习。
libmcrypt-2.5.8.tar.gz、mcrypt-2.6.8.tar.gz、mhash-0.9.9.9.tar.gz php安装mcrpyt插件所需的包 安装方法:http://www.cnblogs.com/huangzhen/archive/2012/09/12/2681861.html
博客园地址http://www.cnblogs.com/noticeable/p/7220368.html 详细讲解了开发流程
http://www.360doc.com/userhome.aspx?userid=19107491&cid=3 jQuery基本选择器及用法 前端模块化开发(AMD和CDM规范) ...http://www.cnblogs.com/dwlsxj/p/4052871.html 浅析MSIL中间语言——PE文件结构篇
SmartPopupWindow ...Android7.0 PopupWindow的兼容问题,修复了问题1和3中描述的问题,但是由引入了新的问题吗,具体详情 博文地址:http://www.cnblogs.com/popfisher/p/6434757.html Github地址:...