定義TestCase,測(cè)試類(lèi)定義代碼如下:
TTestCaseFirst = class(TTestCase)
private
BeTestForm : TBeTestForm; //要測(cè)試的類(lèi)
protected
procedure SetUp; override; //初始化類(lèi)
procedure TearDown; override; //清除數(shù)據(jù)
published
procedure TestFirst; //第一個(gè)測(cè)試方法
procedure TestSecond; //第二個(gè)測(cè)試方法
end;
在定義測(cè)試方法時(shí)候注意,Dunit是通過(guò)RTTI(RunTime Type Information)來(lái)尋找并自動(dòng)注冊(cè)測(cè)試方面的,具體實(shí)現(xiàn)是通過(guò)代碼
TestFramework.RegisterTest(TTestCaseFirst.Suite);
這段代碼將在后面提到,TtestCaseFirst.Suit在尋找的規(guī)則是:
1、測(cè)試方法是沒(méi)有參數(shù)的Procedure
2、測(cè)試方法被申明為Published
SetUp,TearDown是在運(yùn)行測(cè)試方法前、后運(yùn)行的,所有一般把要測(cè)試的類(lèi)的初始化及清除放在這兩個(gè)過(guò)程中。
以下是實(shí)現(xiàn)的代碼:
procedure TTestCaseFirst.SetUp;
begin
BeTestForm := TBeTestForm.Create(Nil);
end;
procedure TTestCaseFirst.TearDown;
begin
BeTestForm.Destroy;
end;
procedure TTestCaseFirst.TestFirst; //第一個(gè)測(cè)試方法
begin
Check(BeTestForm.BeTestFunction(1,3) = 3,'First Test fail');
end;
procedure TTestCaseFirst.TestSecond; //第二個(gè)測(cè)試方法
begin
Check(BeTestForm.BeTestFunction(1,3)=4,'Second Test fail');
end;
//Register TestCase
initialization
TestFramework.RegisterTest(TTestCaseFirst.Suite);
end.
Check是TestCase類(lèi)提供的一個(gè)方法。以下是TestCase的實(shí)現(xiàn)代碼:
procedure TTestCase.Check(condition :boolean; msg :string);
begin
if (not condition) then
Fail(msg, CallerAddr);
End;
如果Check沒(méi)有通過(guò)的話(huà),Dunit將報(bào)錯(cuò)。錯(cuò)誤提示在第二個(gè)參數(shù)中定義,其他有關(guān)類(lèi)及方法的定義請(qǐng)看連機(jī)文檔,文檔放在
Dunit安裝目錄docAPIIDH_Library_DUnit_-_Xtreme_Unit_Testing_for_Delphi.htm
Initialzation代碼完成測(cè)試單元的注冊(cè)。
修改Project主文件
運(yùn)行前的后一步是修改Project主文件TestProject.dpr。先使用菜單Project->View Source打開(kāi)TestProject.dpr.
修改后的代碼如下:
program TestProject;
uses
Forms,
TestFrameWork,
GUITestRunner,
TestUnit in 'TestUnit.pas';
{$R *.res}
begin
Application.Initialize;
//Application.Run;
GUITestRunner.RunRegisteredTests;
end.
上面的加粗代碼是要增加和修改。
運(yùn)行測(cè)試?yán)?br /> 運(yùn)行的測(cè)試結(jié)果如下:
使用TestSuite
使用TestSuite的目的是對(duì)TestCase進(jìn)行分類(lèi)管理,如果我們?cè)僭黾右粋(gè)TestCase 如下
TTestCaseSecond = class(TTestCase)
published
procedure TestThrid;
end;
添加TestThrid實(shí)現(xiàn)代碼后,在initialization代碼處增加
TestFramework.RegisterTest(TTestCaseSecond.Suite);
運(yùn)行以后我們可以看到結(jié)果如下:
如果我們將initialization處的代碼改為如下:
initialization
TestFramework.RegisterTest('Simple suite',TTestCaseFirst.Suite);
TestFramework.RegisterTest('Simple suite',TTestCaseSecond.Suite);
end.