Nunit2.5.10快速上手(笔记)

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

二、安装Nunit,根据提示安装便可,没有什么须要配置的,直接下一步就能够了。html

三、新建类库项目NUnitQuickStart,在该项目添加引用nunit.framework。正则表达式

四、新建类NumbersFixture,添加以下代码:app

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=1;
            int b=2;
            int sum = a + b;
            Assert.AreEqual(3,sum);
        }
    }
}

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

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

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

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

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

       特殊状况:当指定的值需考虑精度的时候,能够设置容错的范围。code

       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));

相关文章
相关标签/搜索