Nunit中如何进行事务性单元测试 单元测试代码
单元测试要求:单元测试方法并不真正去变更数据库,也就是说单元测试不依赖于数据库中的数据。那我们如何解决执行单元测试方法后,不变更数据库中数据呢?
一般的解决方案有两种:
1、 新建一个单元测试数据库,开发数据库与单元测试数据库分离,单元测试方法完全基于单元测试数据库。
此中方法的优点是:,开发人员在开发期间不会对单元测试数据库中数据进行变更,也就不会影响单元测试方法 在任何时间执行。
缺点:单元测试数据库和开发数据库同步问题,特别是对迭代式开发项目,数据库是根据需求在不断地跟进或者变更,同步问题成为了单元测试正常运行的瓶颈。
2、 使用事务对单元测试方法的执行进行回滚。
此种方法的优点:解决了方法一中缺点,不会出现数据库结构不同步的问题。
缺点:在进行CRUD(Create/Read/Update/Delete)操作时,需要在单元测试方法中进行一些插入数据操作,从而保证单元测试与开发数据库的独立,造成了单元测试工作量增加。
在实际的项目中,可以根据需要选择符合自己的解决方案,如果数据库结构在项目进入开发阶段已经确定,并且以后不会有变动,建议采用第一种方案,否则建议第二种方案。目前我们项目采用第二中方案。
一、NUnit事务性单元测试
那使用Nunit框架如果保证数据的会滚呢?这里我们使用了COM+事务。
即System.EnterpriseServices;
具体如下:
///
///单元测试基类,所有单元测试类都需要继承此类
///
[TestFixture]
[Transaction(TransactionOption.Required)]
public class DatabaseFixture:ServicedComponent
{
public DatabaseFixture()
{
//
// TODO: Add constructor logic here
//
}
[TearDown]
文章来源于领测软件测试网 https://www.ltesting.net/