在VS2005利用NUnit進行測試

一、介紹

NUnit是一款用於在.net環境進行單元測試的工具,它的官方網站是:http://www.nunit.org,需要了解歷史和下載最新版本的朋友可以去官方網站下載,目前最新版本是2.4.6了,提供msi安裝文件和壓縮包形式下載,並且支持.net1.1和.net2.0。目前它的最新版本是2.4.6.0。

下載截圖

二、開發

NUnit的運行界面
利用NUnit進行開發之前,需要先添加類庫引用,如下圖:

添加對NUnit.framework.dll的引用

然後編寫代碼

using System;
using System.Collections.Generic;
using System.Text;

namespace NUnitDemo
{
    
/// <summary>
    
/// 說明:這是一個類,用於測試。
    
/// 作者:周公
    
/// 日期:2007-3-27
    
/// 原文出處:http://blog.csdn.net/zhoufoxcn
    
/// </summary>
    public class Person
    {
        
private int personId;
        
private string name;
        
private DateTime birthday;
        
/// <summary>
        
/// 生日
        
/// </summary>
        public DateTime Birthday
        {
            
get { return birthday; }
            
set { birthday = value; }
        }
    
        
/// <summary>
        
/// 姓名
        
/// </summary>
        public string Name
        {
            
get { return name; }
            
set { name = value; }
        }
    
        
/// <summary>
        
/// 編號
        
/// </summary>
        public int PersonId
        {
            
get { return personId; }
            
set { personId = value; }
        }
    
    }
}
用於測試的類:
using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;

namespace NUnitDemo
{
    [TestFixture]
    
/// <summary>
    
/// 說明:這是一個測試類,用來展示NUnit的用法。
    
/// 作者:周公
    
/// 日期:2007-3-27
    
/// 原文出處:http://blog.csdn.net/zhoufoxcn
    
/// </summary>
    public class Test
    {
        Person p 
= new Person();
        
public Test()
        {
        }
        [Test]
        
public void CheckPersonId()
        {
            Assert.AreEqual(p.PersonId, 
0);//檢查對值類型數據未明確賦值之前是不是爲0
        }
        [Test]
        
public void CheckPersonNameNull()
        {
            Assert.AreEqual(p.Name, 
null);//檢查對字符串類型數據未明確賦值之前是不是爲null
        }
        [Test]
        
public void CheckPeronBirthday()
        {
            Assert.AreEqual(p.Birthday, DateTime.MinValue);
//檢查對日期時間類型數據未明確賦值之前是不是爲DateTime.MinValue
        }

        [Test]
        
public void CheckSum()
        {
            
int i = 2, j = 6;
            
int num = 2 + 6;
            Assert.AreEqual(num, 
9);
        }
        [Test]
        [Ignore(
"忽略的原因")]
        
public void CheckClassType()
        {
            Assert.IsInstanceOfType(
typeof(object), p);
        }
    }
}

第一次使用NUnit的人可能對上面的代碼有些地方感到陌生,因爲NUnit通過反射來獲取程序中的相關信息,從而得知哪些類中的哪些方法需要進行測試,所以有必要對NUnit的一些常用屬性進行了解:
TestFixture屬性:用來標識類,表示這個可能包含有用於測試的方法。
Test屬性:用來標識方法,表示這個方法需要進行測試(前提是該方法所在的類是可以測試的)。
SetUp屬性:用來標識方法,在開始所有測試之前執行,用來在測試前初始化一些資源,比如初始化類。
TearDown屬性:用來標識方法,在所有測試完成之後執行,用來釋放一些資源。
Ignore屬性:用來標識方法,指示這個方法由於某些原因暫時不需要測試(比如沒有完成相關代碼)。

更多其它屬性的介紹請查閱隨同下載的文檔(位於doc目錄下的attributes.html)。另外我們還需要注意的是,用於測試的類必須是public的,最好有一個缺省的構造函數。同時用於測試的方法必須不帶任何參數,並且不返回任何參數,同時也必須是public的。

程序代碼:

using System;
using System.Collections.Generic;
using System.Text;

namespace NUnitDemo
{
    
/// <summary>
    
/// 說明:這是一個類,用於測試。
    
/// 作者:周公
    
/// 日期:2007-3-27
    
/// 原文出處:http://blog.csdn.net/zhoufoxcn
    
/// </summary>
    public class Person
    {
        
private int personId;
        
private string name;
        
private DateTime birthday;
        
/// <summary>
        
/// 生日
        
/// </summary>
        public DateTime Birthday
        {
            
get { return birthday; }
            
set { birthday = value; }
        }
    
        
/// <summary>
        
/// 姓名
        
/// </summary>
        public string Name
        {
            
get { return name; }
            
set { name = value; }
        }
    
        
/// <summary>
        
/// 編號
        
/// </summary>
        public int PersonId
        {
            
get { return personId; }
            
set { personId = value; }
        }
    
    }
}
測試的相關代碼:
using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;

namespace NUnitDemo
{
    [TestFixture]
    
/// <summary>
    
/// 說明:這是一個測試類,用來展示NUnit的用法。
    
/// 作者:周公
    
/// 日期:2007-3-27
    
/// 原文出處:http://blog.csdn.net/zhoufoxcn
    
/// </summary>
    public class Test
    {
        Person p 
= new Person();
        
public Test()
        {
        }
        [Test]
        
public void CheckPersonId()
        {
            Assert.AreEqual(p.PersonId, 
0);//檢查對值類型數據未明確賦值之前是不是爲0
        }
        [Test]
        
public void CheckPersonNameNull()
        {
            Assert.AreEqual(p.Name, 
null);//檢查對字符串類型數據未明確賦值之前是不是爲null
        }
        [Test]
        
public void CheckPeronBirthday()
        {
            Assert.AreEqual(p.Birthday, DateTime.MinValue);
//檢查對日期時間類型數據未明確賦值之前是不是爲DateTime.MinValue
        }

        [Test]
        
public void CheckSum()
        {
            
int i = 2, j = 6;
            
int num = 2 + 6;
            Assert.AreEqual(num, 
9);
        }
        [Test]
        [Ignore(
"忽略的原因")]
        
public void CheckClassType()
        {
            Assert.IsInstanceOfType(
typeof(object), p);
        }
    }
}

運行nunit.exe(圖形化方式,如果想利用控制檯方式請運行nunit-console.exe),通過【File】->【Open Project】方式打開生成的程序文件,然後點【Run】按鈕運行測試,測試上面的代碼結果如下:

我們可以看到用於測試方法有三種顏色,這三種顏色指示了測試的結果:
綠色:標識測試通過
黃色:標識忽略了測試這個方法 
紅色:標識測試失敗

三、集成到Vs2005中

如果每次測試都要先編譯程序,再打開NUnit.exe,找到生成的文件測試,這樣太費時也太費事了,下面講怎麼集成到Vs2005中。

首先打開項目屬性,如下圖:

接着打開【設置選】項卡,進行設置:

通過以上設置,我們每次按F5或者調試運行項目的時候就自動啓動NUnit.exe並且加載生成的文件,只需要點擊【Run】就可以測試了。相當方便。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2222847


 
發佈了46 篇原創文章 · 獲贊 8 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章