单元测试要求:单元测试方法并不真正去变更数据库,也就是说单元测试不依赖于数据库中的数据。那我们如何解决执行单元测试方法后,不变更数据库中数据呢?

一般的解决方案有两种:

1、 新建一个单元测试数据库,开发数据库与单元测试数据库分离,单元测试方法完全基于单元测试数据库。

此中方法的优点是:,开发人员在开发期间不会对单元测试数据库中数据进行变更,也就不会影响单元测试方法 在任何时间执行。

缺点:单元测试数据库和开发数据库同步问题,特别是对迭代式开发项目,数据库是根据需求在不断地跟进或者变更,同步问题成为了单元测试正常运行的瓶颈。

2、 使用事务对单元测试方法的执行进行回滚。

此种方法的优点:解决了方法一中缺点,不会出现数据库结构不同步的问题。

缺点:在进行CRUD(Create/Read/Update/Delete)操作时,需要在单元测试方法中进行一些插入数据操作,从而保证单元测试与开发数据库的独立,造成了单元测试工作量增加。

在实际的项目中,可以根据需要选择符合自己的解决方案,如果数据库结构在项目进入开发阶段已经确定,并且以后不会有变动,建议采用第一种方案,否则建议第二种方案。目前我们项目采用第二中方案。

一、NUnit事务性单元测试

那使用Nunit框架如果保证数据的会滚呢?这里我们使用了COM+事务。

即System.EnterpriseServices;

具体如下:

/// <summary>

///单元测试基类,所有单元测试类都需要继承此类

/// </summary>

[TestFixture]

[Transaction(TransactionOption.Required)]

public class DatabaseFixture:ServicedComponent

{

public DatabaseFixture()

{

//

// TODO: Add constructor logic here

//

}

[TearDown]

public void TransactionTearDown()

{

if (ContextUtil.IsInTransaction)

{

ContextUtil.SetAbort();

}

}

所有的单元测试方法都需要继承与此类。比如:

public class AddressSqlDAOTest : DatabaseFixture

这样,单元测试方法执行完后,会继续执行DatabaseFixture类中的TransactionTearDown()方法。从而会滚之前的数据操作,单元测试方法也就不会影响开发数据库,同样开发数据库也不会影响单元测试方法的执行,从而保证了单元测试与数据库数据的独立。

二、如何CRUD单元测试

1、测试增加方法:判断返回的主键是否>0,如果主键>0 说明单元测试方法成功,否则失败

2、测试查询方法:首先在执行单元测试类中的插入数据方法(不是被测试类中的插入方法,而是在单元测试类中写的插入方法,一定要区分开),然后执行查询方法。

3、测试更新方法:首先在执行单元测试类中的插入数据方法,然后执行更新方法。

4、测试删除方法:首先在执行单元测试类中的插入数据方法,然后执行删除方法。

三、单元测试的命名规范

为了便于后期单元测试方法的维护,建议如下命名单元测试类 和单元测试方法。

单元测试类名:被测试类名称+Test

单元测试方法名:被测试方法名称+Test

四、总结

至此,大家就可以利用Nunit中如何进行事务性单元测试已经完毕,相信大家也已经了解了如何让单元测试独立于数据库数据,从而更高效地进行单元测试,也不影响开发。

出处:http://www.cnblogs.com/ywqu/archive/2009/11/07/1598163.html

转载于:https://www.cnblogs.com/mq0036/p/7488527.html

Nunit中如何进行事务性单元测试相关推荐

  1. Xunit编写单元测试程序java_ASP.NET Core中使用xUnit进行单元测试

    单元测试的功能自从MVC的第一个版本诞生的时候,就是作为一个重要的卖点来介绍的,通常在拿MVC与webform比较的时候,单元测试就是必杀底牌,把webform碾压得一无是处. 单元测试的重要性不用多 ...

  2. 在maven项目中使用Junit进行单元测试

    在maven项目中使用Junit进行单元测试(一) 在maven项目中使用Junit进行单元测试一 创建maven项目 编写测试用代码 小结 这是第一篇博文,所以我决定先从比较简单的内容写起,同时熟悉 ...

  3. 在Eclipse中使用JUnit4进行单元测试

    在Eclipse中使用JUnit4进行单元测试 http://www.sina.com.cn  2010年01月18日 14:08  IT168.com [IT168 技术文档]我们在编写大型程序的时 ...

  4. 【Java】在Eclipse中使用JUnit4进行单元测试(初级篇)

    本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能 ...

  5. 在Eclipse中使用JUnit4进行单元测试(初级篇)

    转载自   在Eclipse中使用JUnit4进行单元测试(初级篇) 本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我 ...

  6. java 内存同步_Java中的硬件事务性内存,或者为什么同步将再次变得很棒

    java 内存同步 总览 硬件事务内存有可能允许多个线程同时以推测方式访问相同的数据结构,并使缓存一致性协议确定是否发生冲突. HTM旨在为您提供细粒度锁定的可伸缩性,粗粒度锁定的简单性以及几乎没有锁 ...

  7. 在Eclipse中使用JUnit4进行单元测试(图文教程一)

    在Eclipse中使用JUnit4进行单元测试 单元测试,JUnit4. 这两个有什么关系呢?这就好比(草)单元测试和(割草机).用这个JUnit4工具去辅助我们进行测试.其实不理解这个也没关系,听多 ...

  8. 在Eclipse中使用JUnit4进行单元测试(上)

    摘要:本篇文章讲述在Eclipse中使用JUnit4进行单元测试. 首先,我们来一个傻瓜式速成教程,不要问为什么,Follow Me,先来体验一下单元测试的快感! 首先新建一个项目叫JUnit_Tes ...

  9. Maven项目在eclipse中使用junit进行单元测试时报错:ClassNotFoundException

    Maven项目在eclipse中使用junit进行单元测试时Coonsole出现以下错误: Class not found boco.ips.data.ice.orm.mapper.TestDemoM ...

最新文章

  1. java comparable接口作用_Java 中 Comparable 接口的意义和用法
  2. 互联网企业安全高级指南3.7.1 攻防驱动修改
  3. java排队买票_【排队买票】 (Java代码)
  4. DevExpress的分页Tab控件XtraTabControl控件的使用
  5. L3-020 至多删三个字符 (30 分) DP
  6. 智能会议系统(25)---linphone代码分析
  7. 关于SQL数据库中的数据到如何导出--SQL2000导入到SQL2008中
  8. 用Dart搭建HTTP服务器(1)
  9. 诡异的dp(凸多边形分割):catalan数
  10. 双击运行 jar 文件
  11. 海思HI35xx平台软件开发快速入门之H265解码实例
  12. Foxit PDF SDK ActiveX 5.9.1 Crack
  13. u盘文件夹被隐藏怎么恢复正常?
  14. php使用ffmpeg将音乐wav格式转为mp3格式
  15. Babylonjs 官网demo预览图合集整理 带说明
  16. 一年级上册知识点——语文(人教版)
  17. Linux第7章Gdk及Cairo基础,GNOME 平台的2D图形编程(GTK,GDK,Cairo...) 简介 [转]...
  18. 浪潮AI的五个关键抉择
  19. Oracle索引概述
  20. 【译】TcMalloc: Thread-Caching Malloc

热门文章

  1. Binary Tree Level Order Traversal II --leetcode C++
  2. java接口的作用是什么?
  3. 网站压力测试工具webbench 安装与使用
  4. sql server使用convert来取得datetime日期数据
  5. Git 分支管理 Feature分支 强行删除分支
  6. Spring AOP源码解析——专治你不会看源码的坏毛病!
  7. 后台管理,有无限可能
  8. Struts2 Servelet重构
  9. SQL Server - 在SQL Server中创建ASSEMBLY
  10. Linux 下如何查找木马并处理