当前位置: 首页 > news >正文

对nunit很失望

很多人都介绍了.net下开发的十个必备工具,其中单元测试工具就是nunit。不知道有多少人对它有实际的项目经验;我经过一段时间的使用,对它的一个缺陷很恼火,下面详细介绍一下:
在数据库相关项目的单元测试代码中,需要测试增删改的功能;然而这会使各种功能测试互相影响,破坏测试数据库,产生垃圾数据,使每次单元测试运行在一个未知的状态下,总之是一件很糟糕的事情。
针对这种情况,通常的解决方案是准备一个测试用数据库,每次单元测试结束后,还原这个数据库,这只能称为一种办法,但不漂亮。
我通过查阅资料,发现了另外的一种很clean的解决方案:“利用com+的自动事务!”
基本处理方法是这样的:
1、写一个从ServicedComponent继承的类,声明TransactionOption.Required,并在TearDown方法中回滚事务,具体代码如下

None.gif using  System;
None.gif
using  NUnit.Framework;
None.gif
using  System.EnterpriseServices;
None.gif
namespace  TransactionTesting
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif[TestFixture]
InBlock.gif[Transaction(TransactionOption.Required)]
InBlock.gif
public class DatabaseFixture:ServicedComponent  
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif[TearDown]
InBlock.gif      
public void TransactionTearDown()
ExpandedSubBlockStart.gifContractedSubBlock.gif      
dot.gif{
InBlock.gif            
if(ContextUtil.IsInTransaction)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                  ContextUtil.SetAbort();
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif      }

ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif}

None.gif


2、修改原有的单元测试代码,使所有的测试都从刚刚写好的类继承

看了这个方法后,我非常激动,真是nice啊!可是经过仔细测试,却发现nunit对这个方法的支持非常不好,运行时会抛出很多异常,难道反射调用com+存在天生的缺陷?(我没看nunit的代码,瞎猜的)

 

转载于:https://www.cnblogs.com/jjstar/archive/2004/07/14/24002.html

相关文章:

  • [转载] 一篇不错的Spring Framework的tutorial
  • [NEWS] J2SE5.0来了
  • 利用委托实现对象实例按多字段嵌套排序
  • SQL SERVER中的三种获得自增长ID的方法
  • 自制简易AP柱面定向天线(zz)
  • JScript中的prototype(原型)属性研究(2)
  • 今天最大的收获
  • 树形导航的实现xml
  • 加菲猫语录
  • 如何在Evolution中加密(四)
  • 采用开源软件搭建WebGIS系统(2)最简单的Demo
  • 几种调用WebService的方法
  • [Avalon] Avalon中的Conditional Formatting.
  • 转载:码根码的悲哀
  • 【Leetcode】104. 二叉树的最大深度
  • Android Studio:GIT提交项目到远程仓库
  • Angular Elements 及其运作原理
  • CSS实用技巧干货
  • ECS应用管理最佳实践
  • java 多线程基础, 我觉得还是有必要看看的
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Less 日常用法
  • Median of Two Sorted Arrays
  • Selenium实战教程系列(二)---元素定位
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Vue 重置组件到初始状态
  • 分享一份非常强势的Android面试题
  • 关于List、List?、ListObject的区别
  • 码农张的Bug人生 - 初来乍到
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 网络应用优化——时延与带宽
  • 微信公众号开发小记——5.python微信红包
  • 译有关态射的一切
  • const的用法,特别是用在函数前面与后面的区别
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • MPAndroidChart 教程:Y轴 YAxis
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • (4) PIVOT 和 UPIVOT 的使用
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (待修改)PyG安装步骤
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)http-server应用
  • (转)jQuery 基础
  • (转)关于pipe()的详细解析
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET 8.0 中有哪些新的变化?
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET/C# 的字符串暂存池
  • .Net中的设计模式——Factory Method模式