• Nunit NMock Ncover单元测试


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

     

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

    一般的解决方案有两种:

    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

    如果你认为此文章有用,请点击底端的【推荐】让其他人也了解此文章,

    你也可以加我的新浪微博,以便实时了解我的动态:http://weibo.com/ywqu

    WOWO英语(英语培训学校):http://www.wowomandarin.cn   上海电子商务解决方案:http://www.hello36.com 

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
    分类: Nunit NMock Ncover单元测试

    Nunit NMock Ncover单元测试

     
    摘要: 单元测试要求:单元测试方法并不真正去变更数据库,也就是说单元测试不依赖于数据库中的数据。那我们如何解决执行单元测试方法后,不变更数据库中数据呢?阅读全文
    posted @ 2009-11-07 19:05 灵动生活 阅读(1603) | 评论 (6) 编辑
     
    摘要: 推行单元测试的目的: 1、 减少BUG提高项目的质量 2、 养成良好的编码习惯,提高开发人员编码水平 阅读全文
    posted @ 2009-11-06 21:15 灵动生活 阅读(2204) | 评论 (3) 编辑
     
    摘要: Nunit框架在VS2005环境下单步调试(图解),希望对新手有帮助。阅读全文
    posted @ 2009-11-04 20:52 灵动生活 阅读(1661) | 评论 (0) 编辑
  • 相关阅读:
    HDU 1019 Least Common Multiple GCD
    HDU 1263 水果 结构体排序
    HDU 1256 画8 模拟题
    HDU 2058 The sum problem 数学题
    VC6.0开发OCX按钮控件
    利用压缩软件制作插件安装包
    vs生成的exe程序和相关dll打包
    vs2010开发activex(MFC)控件/ie插件(一)
    vs2010开发activex(MFC)控件/ie插件(二):js传参数
    vs2010开发activex(MFC)控件/ie插件(三),js调用ocx控件的接口函数
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3143895.html
Copyright © 2020-2023  润新知