一、介紹
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.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.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.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.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