Nunit中如何进行事务性单元测试

发表于:2009-12-18来源:作者:点击数: 标签:
Nunit中如何进行事务性单元测试 单元测试代码 单元测试要求: 单元测试方法 并不真正去变更 数据库 ,也就是说单元测试不依赖于数据库中的数据。那我们如何解决执行单元测试方法后,不变更数据库中数据呢? 一般的 解决方案 有两种: 1、 新建一个单元测试数

  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]

原文转自:http://www.ltesting.net