代碼比較簡單,沒什么可說的吧?下邊是C#代碼:
using System;
using System.Collections.Generic;
using System.Text;
namespace NUnitCS
{
public class Book
{
private string pid = null;
private string pname = null;
public string id
{
get
{
return pid;
}
set
{
pid = value;
}
}
public string name
{
get
{
return pname;
}
set
{
pname = value;
}
}
}
}
也沒什么可說的吧?下邊是J#代碼:
package NUnitJS;
public class Book
{
private String pid = null;
private String pname = null;
/** @property */
public void set_id(String value)
{
pid = value;
}
/** @property */
public String get_id()
{
return pid;
}
/** @property */
public void set_name(String value)
{
pname = value;
}
/** @property */
public String get_name()
{
return pname;
}
}
可以看到,J#代碼與VB和C#代碼有些不同,因?yàn)镴#的語法是從Java演變過來的,所以其屬性在定義時(shí)被拆成了set_XXX和get_XXX這樣的兩個(gè)方法。但僅有set_XXX和get_XXX這樣的兩個(gè)方法還不夠,還需要使用@property指令進(jìn)行說明。雖然用不用@property指令在調(diào)用時(shí)也沒什么區(qū)別,但你可以嘗試將變量pid和pname更名為id和name,重新編譯;而后再將@property指令去掉,再重新編譯。真的不一樣。
至此,用于測試的類編寫完成了。
四、編寫測試用例
這里只用了一個(gè)類進(jìn)行測試,名為BookTest,以前這樣的類可能需要繼承NUnit.Framework.TestCase類,但現(xiàn)在只需要對該類使用TestFixture屬性進(jìn)行標(biāo)識即可,而無須繼承了。BookTest類包含兩個(gè)用例,分別對應(yīng)該類的testId和testName方法,即每個(gè)方法實(shí)現(xiàn)了一個(gè)測試用例。注意,在NUnit中,這些用來實(shí)現(xiàn)測試用例的方法有兩種手段進(jìn)行標(biāo)識:一個(gè)是以testXXX的格式來命名,一個(gè)是使用Test屬性進(jìn)行標(biāo)識。此外,BookTest還有Init和Dispose這兩個(gè)方法,并分別使用SetUp和TearDown屬性來進(jìn)行標(biāo)識,前者在每個(gè)測試方法開始之前執(zhí)行,多用來做初始化;后者在每個(gè)測試方法完成之后執(zhí)行,多用來清理資源。注意,這兩個(gè)方法的名稱并沒有什么限制,但必須用SetUp和TearDown屬性進(jìn)行標(biāo)識。另外,NUnit還提供了TestFixtureSetUp和TestFixtureTearDown屬性,功能與SetUp和TearDown類似,但前者是在所有用例執(zhí)行之前做初始化、之后做清理,而后者是在每個(gè)用例執(zhí)行之前做初始化、之后做清理。下面開始編寫B(tài)ookTest。
點(diǎn)擊菜單“項(xiàng)目”->“添加類”,打開“添加新項(xiàng)”對話框,將名稱改為BookTest.vb或BookTest.cs、BookTest.jsl,然后點(diǎn)擊“添加”按鈕創(chuàng)建該類。修改代碼,VB代碼如下:
Imports NUnit.Framework
<TestFixture()> _
Public Class BookTest
Dim bo As Book = Nothing
<SetUp()> _
Public Sub Init()
Console.WriteLine("測試開始!")
bo = New Book
Console.WriteLine("book對象被初始化!")
End Sub
<Test()> _
Public Sub testId()
bo.id = "001" '設(shè)置id屬性的值為
'使用Assert查看id屬性的值是否為
Assert.AreEqual("001", bo.id)
Console.WriteLine("id屬性被測試!")
End Sub
<Test()> _
Public Sub testName()
bo.name = "ASP" '設(shè)置name屬性的值為ASP
'使用Assert查看name屬性的值是否為JSP,這是個(gè)必然出現(xiàn)錯(cuò)誤的測試
Assert.AreEqual("JSP", bo.name)
Console.WriteLine("name屬性被測試!")
End Sub
<TearDown()> _
Public Sub Dispose()
Console.WriteLine("book對象將被清理!")
bo = Nothing
Console.WriteLine("測試結(jié)束!")
End Sub
End Class
這里Init和Dispose方法沒什么好說的,是執(zhí)行了對book對象的初始化和清理,不過testId和testName需要說明一下。前者是在對bo的id屬性進(jìn)行測試,首先賦值為”001”,然后使用Assert的AreEqual方法查看id屬性中存放的值是否是期待的值,由于我的期待值也是”001”,所以執(zhí)行后這個(gè)用例應(yīng)該是成功的;后者則是對bo的name屬性進(jìn)行測試,也是首先賦值為”ASP”,然后使用Assert的AreEqual方法查看其值是否是期待的,由于我特意將期待值設(shè)定為根本不可能的”JSP”,因此這個(gè)用例執(zhí)行后會(huì)出現(xiàn)一個(gè)錯(cuò)誤。但請注意,由于我是特意要讓測試出現(xiàn)錯(cuò)誤,所以將期待值設(shè)定成了不可能的值,如果你是測試人員,請千萬不要這么做,否則如果別的地方導(dǎo)致了錯(cuò)誤,很容易給自己造成不必要的麻煩。