1、下载Nunit:http://www.nunit.org/index.php?p=download,下载MSI格式的安装包;

2、安装Nunit,根据提示安装即可,没有什么需要配置的,直接下一步就可以了。

3、新建类库项目NUnitQuickStart,在该项目添加引用nunit.framework。

4、新建类NumbersFixture,添加如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework; namespace NUnitQuickStart
{
[TestFixture]
public class NumbersFixture
{
[Test]
public void Sum()
{
int a=;
int b=;
int sum = a + b;
Assert.AreEqual(,sum);
}
}
}

5、右击该类库项目,选择属性,打开之后单击调试,选择启动外部程序,单击带……的按钮,在打开新的对话框之后,选择安装Nunit目录下的C:\Program Files\NUnit 2.5.10\bin\net-2.0\nunit.exe这是我的安装目录。选择好之后,单击vs中的调试按钮,即可调试。vs会自动打开Nunit,这时Nunit什么也没显示,选择File,Open File打开你的项目,然后单击Run按钮即可进行测试。

6、根据测试计划,使用Assert下的各个方法对项目中的单元方法进行各项测试。

6.1 Equality Asserts,用来判定测试结果是否与预期一致

公式: Assert.AreEqual( object expected, object actual );

例子:NUnit.Framework.Assert.AreEqual(10, vTestResult),其中vTestResult为一个变量,它可以通过运行指定的测试情况来获取相应的值。

特殊情况:当指定的值需考虑精度的时候,可以设置容错的范围。

Assert.AreEqual( double expected, double actual, double tolerance );

Assert.AreEqual( 10.9F, 10.1F, 0.8F );可以正常结束

Assert.AreEqual( 10.9F, 10.1F, 0.7F );不能正常结束

6.2 Identity Asserts 判断两个对象是否相同

公式: Assert.AreSame( object expected, object actual );//判定两个对象是否相同
              Assert.AreNotSame( object expected, object actual );//判定两个对象是否不相同
              Assert.Contains( object anObject, IList collection );//判定一个对象是否包含在一组数据里
       例子:

DataTable vDT1 = new DataTable("FirstDT");

DataTable vDT2 = vDT1.Copy();

vDT2.TableName = "SecondDT";

DataTable vDT3 = vDT1;

ArrayList vList = new ArrayList();

vList.Add(vDT2);

NUnit.Framework.Assert.AreSame(vDT1, vDT3);

NUnit.Framework.Assert.AreNotSame(vDT1, vDT2);

NUnit.Framework.Assert.Contains(vDT2, vList);

特殊情况:当判断两个对象是否相同,最好不同对象以不同的名称命名。

如果之上的vDT2.TableName没有进行命名,并以以下方法判定,那出错信息将没有任何意义。

NUnit.Framework.Assert.Contains(vDT1, vList);

6.3 Condition Tests 条件断言

公式: Assert.IsTrue( bool condition );//判断执行结果是否为真
              Assert.IsFalse( bool condition);//判断执行结果是否为假
              Assert.IsNull( object anObject );//判断执行结果是否为空
              Assert.IsNotNull( object anObject );//判断执行结果是否为非空

Assert.IsNaN( double aDouble );//(Not a Number)的意思,一般只有当aDouble=double.NaN的时候才能实现。

Assert.IsEmpty( string aString );//判断指定值是否为空字符串 ※但是绝对不是Null
              Assert.IsNotEmpty( string aString );//判定指定值是否为非空,即有值。
              Assert.IsEmpty( ICollection collection );//判定所有列表组成是否为空

例:

string vstrbychar = "";

NUnit.Framework.Assert.IsEmpty(vstrbychar.ToCharArray());

string[] vstres = new string[2];

NUnit.Framework.Assert.IsEmpty(vstres);

ArrayList vList = new ArrayList();

NUnit.Framework.Assert.IsEmpty(vList );

Assert.IsNotEmpty( ICollection collection );//判定所有列表组成是否为非空

6.4 Comparisons 比较断言

公式:Assert.Greater( int arg1, int arg2 );//判断arg1比arg2大,arg1为执行结果,arg2为预期的范围;※注意必须是大于,不包含等于。

自己可以试试 Assert.Greater(1, 2);执行测试程序,将会出现 Excepted:greater then 2;But was:1的错误

Assert.GreaterOrEqual( int arg1, int arg2 );//判断arg1大于等于arg2

Assert.Less( int arg1, int arg2 );//判断arg1小于arg2

Assert.LessOrEqual( int arg1, int arg2 );//判断arg1小于等于arg2

6.5 Type Asserts 类型断言

公式:Assert.IsInstanceOfType( Type expected, object actual );//判断actual指定实例是否为expected类型

例:在当前测试类内,实现如下断言:

NUnit.Framework.Assert.IsInstanceOfType(typeof(AccountTest3), this);//AccountTest3为当前类的类名,this表示当前测试类的实例

Assert.IsNotInstanceOfType( Type expected, object actual );//判断actual指定实例不是expected类型

Assert.IsAssignableFrom( Type expected, object actual );//判断actual是否由expected类型生成的实例;

例:Assert.IsAssignableFrom(typeof(object), "word");//这个断言将会失败,因为字符串"word"是string类型,而不是object类型创建的

Assert.IsNotAssignableFrom( Type expected, object actual );//判断actual是否不由expected类型生成的实例;

6.6 Utility Methods 实用方法(主要用来自定义断言)

公式:Assert.Fail();//当不使用断言时,可以直接使用Fail方法来提交测试失败

Assert.Fail( string message );//提交失败时,显示失败的原因等信息

例:if(vPath.Equal("")){Assert.Fail("Path is not right!")}

Assert.Ignore();//忽略,主要为了暂时不进行测试或者指定条件可以不予考虑,但是测试结果会在测试界面以黄色显示

6.7 StringAssert  字符串断言

公式:StringAssert.Contains( string expected, string actual );//指定字符串包含预期的值 ※注意这里是区分大小写字母的,也区分全角半角字符

StringAssert.StartsWith( string expected, string actual );//指定字符串起始于预期的值

StringAssert.EndsWith( string expected, string actual );//指定字符串以预期的值结束

StringAssert.AreEqualIgnoringCase( string expected, string actual );//判断两个字符串是否相同。※不区分大小写,但是区分全角和半角

StringAssert.IsMatch( string expected, string actual );//判断实际执行的结果是否与预期的格式匹配

例:NUnit.Framework.StringAssert.IsMatch(@"^\d{3}[A-Z]{2}", "991XX");

//具体正则表达式请参考 http://www.cnblogs.com/si812cn/archive/2008/10/10/1307792.html

6.8 CollectionAssert 列表集断言

公式:CollectionAssert.AllItemsAreInstancesOfType( IEnumerable collection,Type expectedType );//判定所有的列表项都属于expectedType类型

例:

ArrayList vList2 = new ArrayList();
                    vList2.Add("string");
                    vList2.Add("123");

CollectionAssert.AllItemsAreInstancesOfType( vList2, typeof(string) );

如果以上的vList2.Add("123")改成vList2.Add(123);则将测试失败。

CollectionAssert.AllItemsAreNotNull( IEnumerable collection );//所有列表项均为非空

例:

ArrayList vList3 = new ArrayList();
                    vList3.Add(null);
                    vList3.Add("123");

CollectionAssert.AllItemsAreNotNull( vList3);

以上测试将失败,因为第一项为空。

CollectionAssert.AllItemsAreUnique( IEnumerable collection );//所有列表项是唯一的 ※区分大小写,区分全角和半角

例:

ArrayList vList4= new ArrayList();
                    vList4.Add(1);
                    vList4.Add(2);

vList4.Add(1);

CollectionAssert.AllItemsAreUnique( vList4);

以上测试将失败,因为第一项与第三项重复出现了。

CollectionAssert.AreEqual( IEnumerable expected, IEnumerable actual );

//按照顺序比较两个列表内各项值是否一致 ※包括类型,大小写,全半角,NULL也可以比较

CollectionAssert.AreEquivalent( IEnumerable expected, IEnumerable actual);

//与CollectionAssert.AreEqual不同,它可以是没有顺序的,但是一项只能对应一项,不能一个值与多个相同值比较

CollectionAssert.AreNotEqual( IEnumerable expected, IEnumerable actual );//两列不相同

CollectionAssert.AreNotEquivalent( IEnumerable expected, IEnumerable actual );//两列不等价

CollectionAssert.Contains( IEnumerable expected, object actual );//执行结果包含在预期的列表中

CollectionAssert.DoesNotContain( IEnumerable expected, object actual );//执行结果不被包含在预期的列表中

CollectionAssert.IsSubsetOf( IEnumerable subset, IEnumerable superset );

//subset内的列表项都出现在superset中,则表示subset是superset的子集 ※包含两个列表集数据数相同

例:

ArrayList vList7 = new ArrayList();

vList7.Add(1);

vList7.Add("123");

ArrayList vList8 = new ArrayList();

vList8.Add(1);

vList8.Add("123");

vList8.Add(null);

CollectionAssert.IsSubsetOf( vList7, vList8 );//该断言将可以通过,反过来则不能通过

如果vList8.Add(null);去除掉
                        CollectionAssert.IsSubsetOf( vList7, vList8 );//该断言将可以通过,反过来也可以通过,因为根据子集的概念,他俩相互都可以是对方的子集

CollectionAssert.IsNotSubsetOf( IEnumerable subset, IEnumerable superset);//判断不是子集

CollectionAssert.IsEmpty( IEnumerable collection );//判断列表值是否为空值,即已定义,未赋值

例:

ArrayList vList9 = new ArrayList();

CollectionAssert.IsEmpty(vList9);//执行成功

ArrayList vList10 = new ArrayList();
                          vList10.Add("");
                         CollectionAssert.IsEmpty(vList10);//执行失败

6.9 FileAssert  文件断言

公式:FileAssert.AreEqual( Stream expected, Stream actual );//判断两个文件流一致

6.10 Constraint-Based Assert Model 约束断言模式

公式:Assert.That( object actual, IConstraint constraint ) //执行结果与指定的约束值对比

例:

Assert.That( myString, Is.EqualTo("Hello") );//Is属性存在于NUnit.Framework.SyntaxHelpers命名空间内

Assert.That( myString, new EqualConstraint("Hello") );

Assert.That( 2.3, Is.GreaterThan( 2.0 ) & Is.LessThan( 3.0 ) );//可以组合使用

备注:NUnit.Framework.SyntaxHelpers里包含了IS,Has,Text,List,ListMapper属性进行一系列的操作。

.Net中的map类有Dictionary、SortedDictionary、HashTable、SortedList等,SortedDictionary提供了排序支持。

Has里主要有Has.Perporty(vName)判断是否有相应的属性

Has.Count(int),Has.Length(int)

List Mapper:可以对列表内每个项指定预期值

string[] strings = new string[] { "a", "ab", "abc" };
              int[] lengths = new int[] { 1, 2, 3 };

Assert.That(List.Map(strings).Property("Length"), Is.EqualTo(lengths));
   
              Assert.That(new ListMapper(strings).Property("Length"),Is.EqualTo(lengths));

Nunit2.5.10快速上手(笔记)的更多相关文章

  1. CloudFoundry 快速上手笔记

    1.登陆cf 2.登陆进入webservice 3.查看ruby版本 4.查看gem版本 5.安装CF 6.配置cf Download the CLI from github: https://git ...

  2. Dubbo | Dubbo快速上手笔记 - 环境与配置

    目录 前言 1. Dubbo相关概念 1.1 自动服务发现工作原理 2. 启动文件 2.1 zookeeper-3.4.11\bin\zkServer.cmd 2.2 zookeeper-3.4.11 ...

  3. 用Docker在一台笔记本电脑上搭建一个具有10个节点7种角色的Hadoop集群(上)-快速上手Docker

    如果想在一台电脑上搭建一个多节点的Hadoop集群,传统的方式是使用多个虚拟机.但这种方式占用的资源比较多,一台笔记本能同时运行的虚拟机的数量是很有限的.这个时候我们可以使用Docker.Docker ...

  4. WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)

    WebAPI调用笔记   前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...

  5. 【opencv入门篇】 10个程序快速上手opencv【下】

    导言:本系列博客目的在于能够在vs快速上手opencv,理论知识涉及较少,大家有兴趣可以查阅其他博客深入了解相关的理论知识,本博客后续也会对图像方向的理论进一步分析,敬请期待:) 上篇传送:http: ...

  6. 【opencv入门篇】 10个程序快速上手opencv【上】

    导言:本系列博客目的在于能够在vs快速上手opencv,理论知识涉及较少,大家有兴趣可以查阅其他博客深入了解相关的理论知识,本博客后续也会对图像方向的理论进一步分析,敬请期待:) PS:官方文档永远是 ...

  7. Knockout.js快速学习笔记

    原创纯手写快速学习笔记(对官方文档的二手理解),更推荐有时间的话读官方文档 框架简介(Knockout版本:3.4.1 ) Knockout(以下简称KO)是一个MVVM(Model-View-Vie ...

  8. [Full-stack] 快速上手开发 - React

    故事背景 [1] 博客笔记结合<React快速上手开发>再次系统地.全面地走一遍. [2] React JS Tutorials:包含了JS --> React --> Red ...

  9. Markdown快速上手指南

    Markdown快速上手指南 1.Markdown介绍 markdown可以实现快速html文档编辑,格式优没,并且不需要使用html元素. markdown采用普通文本的形式,例如读书笔记等易于使用 ...

随机推荐

  1. Mybatis 使用Mybatis时实体类属性名和表中的字段名不一致

    开发中,实体类中的属性名和对应的表中的字段名不一定都是完全相同的,这样可能会导致用实体类接收返回的结果时导致查询到的结果无法映射到实体类的属性中,那么该如何解决这种字段名和实体类属性名不相同的冲突呢? ...

  2. Struts2中的设计模式----ThreadLocal模式

    http://www.cnblogs.com/gw811/archive/2012/09/07/2675105.html 设计模式(Design pattern):是经过程序员反复实践后形成的一套代码 ...

  3. [NOI2015]小园丁与老司机(DP+上下界最小流)

    由于每行点的个数不超过1000,所以行内DP可以使用$O(n^2)$算法. 先找到每个点所能直接到达的所有点(x,y,x+y或x-y相同),用排序实现. 第一问:以行为阶段,对于每行,暴力枚举最有路径 ...

  4. JZYZOJ1386 扑街 状压dp

    http://172.20.6.3/Problem_Show.asp?id=1386   有一个W行H列的街道,需要用1*2小砖铺盖,小砖之间互相不能重叠,问有多少种不同的铺法? 数组f的不往后延伸指 ...

  5. BZOJ 2631 tree(动态树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2631 [题目大意] 要求支持链修改,链查询,边断开,连接操作 [题解] 链修改分乘和加 ...

  6. 【分块】计蒜客17120 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor

    题意:给一棵树,每个点有权值.q次询问a,b,k,问你从a点到b点,每次跳距离k,权值的异或和? 预处理每个点往其根节点的路径上隔1~sqrt(n)的距离的异或和,然后把询问拆成a->lca(a ...

  7. [转]servlet配置中init-param

    需要初始化的参数比如你的servlet里面有个属性为int total=0默认是0,你想让他初始时50则用init-param 给他赋值 init-param面对应的参数名和值,是给servlet在初 ...

  8. Android Logcat Security(转)

    讲解了在Android开发中logcat使用不当导致的安全问题 原帖地址:http://drops.wooyun.org/tips/3812 0x00 科普 development version : ...

  9. 使用Busybox制作CRAMFS文件系统成功

    转:http://www.360doc.com/content/11/1013/22/7775902_155877501.shtml 这几天在使用Busybox制作FS2410开发板的CRAMFS文件 ...

  10. 一键建立zookeeper集群

    使用yaml文件的好处,通过service name来进行pod间的服务发现, 集群配置dns. [root@k8s-master ~]# cat zookeeper-cluster.yaml api ...