`

用NUnit进行单元测试

阅读更多

用NUnit进行单元测试

 

转自:http://hi.baidu.com/chenying99/blog/item/b9b02423dab2de47935807b0.html

 

-------------------------------------------------------------------------------------------------------------

 

一、为什么要做单元测试
  软件的生命是什么,是质量!而保证质量的唯一方法,就是测试。对自己编写的每一个功能类进行测试是一种负责的态度,尤其在团队合作开发大型软件的时候更是如此。在时下流行的测试驱动开发(TDD)和敏捷开发中,甚至要求“测试先行”,在编写代码之前就首先完成测试用例,根据测试用例再来编写代码,把你的需求用测试给描述出来。
二、为什么要用测试工具进行单元测试
  利用测试工具来进行测试,需要编写测试代码,似乎远不如直接拉一个界面进行测试来得方便和熟练。我的理解是这样的:
  ⑴、测试代码易读性更高。编写测试代码的时候,很容易为代码加上注释,而拉界面测试,除非为每一个文本框都加上标签说明,否则其他测试人员无法了解到某个文本框的作用。
  ⑵、编写测试代码效率更高。出于第一条原因,在熟练掌握的前提下,编写测试代码所需要的时间更短。在一个复杂系统里面,需要做的单元测试数量会相当的多,编写代码测试会节省大量的时间。
  ⑶、测试代码可移植。这一条可能是最重要的一个原因,我们编写的测试代码,不论是控制台环境还是winform,抑或是webform,都可以直接使用而无需任何的修改,这一点是直接拉界面所无法比的。
三、如何使用NUnit进行单元测试
  ⑴、NUnit界面
  单元测试的工具很多,在.NET里目前最著名的工具恐怕就是NUnit了。这个工具可以到http://www.nunit.org/去下载。
下载安装工具后,进入安装目录下的bin目录,可以看到NUnit-gui.exe,这个文件就是NUnit的图形化工具了,在具体使用它之前,首先简单介绍一下它的界面。

NUnit运行的第一种状态

NUnit运行的第二种状态

  这个界面的左边是测试任务列表,右边上部是一个进度条,它的颜色可能会有三种情况:绿色表示所有的测试都通过;红色表示有测试没有通过;黄色表示有部分测试被用户跳过,但已经测试的部分没有错误。
  ⑵、编写测试类
  在编写测试类之前,必须为项目添加指向nunit.framework.dll的引用,否则无法找到命名空间。步骤为:在资源浏览器中右击引用,然后选择添加引用NUnit.framework组件,在添加引用对话框中按选择和确认按钮。

  我们用一个简单的例子来说明测试类基本的编写方法。
  为工程加一个NumbersFixture类。这里是这个例子的代码。
     1 using System;
     2 using NUnit.Framework;
     3 
     4 namespace NUnitQuickStart
     5 {
     6  [TestFixture]
     7  public class NumersFixture
     8  {
     9   [Test]
 10   public void AddTwoNumbers()
 11   {
 12    int a=1;
 13    int b=2;
 14    int sum=a+b;
 15    Assert.AreEqual(sum,3);
 16   }
 17  }
 18 }

  第二行代码,为测试类添加命名空间。第六行代码,用[TestFixture]标记测试类,第九行代码,用[Test]标记测试方法,只有用这两个记号标记的类和方法才能显示在NUnit的任务列表中。第十五行,用Assert.AreEqual方法比较待测试值与预期值是否相符。
  还需要注意的是,测试类必须有一个默认的构造函数,测试方法必须是无参数无返回值的,否则不会出现在测试列表中。
  这个例子虽然简单,但已经是一个完整的单元测试类了,现在就可以开始进行单元测试了。
  ⑶、启动测试
  在项目上右键,选择属性,切换到调试选项卡,在启动项目一栏中选择外部项目启动,点击后面的浏览按钮找到NUnit-gui.exe的路径。然后编译运行项目。


  项目运行后会自动打开NUnit图形界面,如果是第一次开始NUnit-Gui,它打开时可能没有加载测试,这时需要在菜单栏中打开我们的项目。当测试类被加载后,就可以点击右上方的运行按钮进行测试了,如果进度条呈现绿色,那么恭喜你,你的单元测试通过了。

以上介绍的只是最基本的单元测试,如果想进一步学习,可以参考http://www.cnblogs.com/confach/archive/2005/06/20/177817.html

 

分享到:
评论

相关推荐

    冒险岛群聊机器人 蠢猫(无视计算 星之力计算 世界组队表 占卜 怪物查询).zip

    无人机最强算法源码,易于部署和学习交流使用

    node-v8.14.1-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    HostelDataset(been personally processed)

    此数据集主要是一个跟酒店类型有关的数据集,源于kaggle网站上的Guatemalas_Travel数据集,因设计所需,本人对原来的数据集进行了必要的修改。

    3D相册.zip

    3D相册.zip

    中国统计NJ面板数据-(更新至2022年)平均每天能源消费量.xls

    数据来源:中国统计NJ-2023版

    3dmax空对象清除器下载

    3dmax空对象清除器,在场景中找到空对象,向你显示这些对象的列表,并允许你从场景中删除它们。

    node-v10.13.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    中国统计NJ面板数据-(更新至2022年)入境外国游客分组构成.xls

    数据来源:中国统计NJ-2023版

    数据要素资产化与数据资产入表路线框架总体规划方案.pptx

    数据要素资产化与数据资产入表路线框架总体规划方案.pptx

    用户手册 8100C/8200C/8300C系列无功补偿装置

    施耐德电气 8100C 8200C 8300C 用户手册

    毫无特色的 QQ 机器人.zip

    无人机最强算法源码,易于部署和学习交流使用

    员工培训方案gl.ppt

    员工培训方案gl.ppt

    infrared-remote-controller-master

    旅行商问题

    小米扫地机器人工程源码程序STM32103 freeRTOS设计源代码.zip

    小米扫地机器人工程源码程序STM32103 freeRTOS设计源代码,某米早起的扫地机器人的源码,使用的是STM32开发,freeRTOS系统,包含完整的工程源码,可以做为你的学习设计参考。 HARDWARE文件夹 硬件初始化源文件 application_Robot 机器人行为相关的文件 application_Share 机器人共享相关的文件(一般为算法) application_Motor 机器人电机应用相关文件 application_Key 机器人按键应用相关文件 application_Led 机器人LED应用相关文件 application_Led 机器人adc获取与处理应用相关文件 application_PowerChip 机器人电池管理芯片与充电应用相关文件 application_Bmi160 机器人BMI160 陀螺仪芯片 应用相关文件 application_Drop 机器人掉落传感器应用相关文件 application_UltraSonic 机器人超声波传感器应用相关文件 appl

    39黎秋菊.ipynb

    39黎秋菊.ipynb

    node-v11.14.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    域名注册查询的微信小程序页面源码

    模板描述:域名注册查询 微信小程序。域名注册查询的微信小程序页面源码是使用微信WEB开发者工具开发,亲测可直接运行。该程序从设计上满足了相关应用服务的设计要求,是一款非常值得学习简介的DEMO小程序源码。

    水下机器人无线充电上位机.zip

    无人机最强算法源码,易于部署和学习交流使用

    DCS 400系列可控硅直流传动系统手册

    DCS 400 手册

    node-v11.15.0-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics