创建一个简单的例子
创建一个被测试的Project
创建一个名为BeTestProject 的Project,将确省的Unit1 保存为BeTestUnit.pas文件。把确省的TForm1 改名为BeTestForm 中增加一个Public 的函数
BeTestFunction,BeTestFunction 代码如下:
function BeTestForm.BeTestFunction(i,j:integer):integer;
begin
Result:=i*j;
end;
创建一个测试Project
创建新的Project
再创建一个Project,命名为TestProject。如果没有和BeTestProject 放在同一目录,将BeTestProject的存放路径加到加到菜单Tools>Environment Options 里面的Library->Library Path 中。
编写TestCase
删除确省的Unit1(Form1),创建一个的Unit,注意不是Form.
将创建的Unit 保存为TestUnit,在interface 中加入以下代码
uses
TestFrameWork,BeTestUnit;
TestFrameWork 是每个TestCase 都必须使用的,后面要使用的TtestCase 等类的定义都在TestFrameWork 中。BeTestUnit 是将要被测试单元。
定义TestCase,测试类定义代码如下:
TTestCaseFirst = class(TTestCase)
private
BeTestForm : TBeTestForm; //要测试的类
protected
procedure SetUp; override; //初始化类
procedure TearDown; override; //清除数据
published
procedure TestFirst; //第一个测试方法
procedure TestSecond; //第二个测试方法
end;
在定义测试方法时候注意,Dunit 是通过RTTI(RunTime Type Information)来寻找并自动注册测试方面的,具体实现是通过代码TestFramework.RegisterTest(TTestCaseFirst.Suite);
这段代码将在后面提到,TtestCaseFirst.Suit 在寻找的规则是:
1、测试方法是没有参数的Procedure
2、测试方法被申明为Published
SetUp,TearDown 是在运行测试方法前、后运行的,所有一般把要测试的类的
初始化及清除放在这两个过程中。
以下是实现的代码:
procedure TTestCaseFirst.SetUp;
begin
BeTestForm := TBeTestForm.Create(Nil);
end;
procedure TTestCaseFirst.TearDown;
begin
BeTestForm.Destroy;
end;
procedure TTestCaseFirst.TestFirst; //第一个测试方法
begin
Check(BeTestForm.BeTestFunction(1,3) = 3,'First Test fail');
end;
procedure TTestCaseFirst.TestSecond; //第二个测试方法
begin
Check(BeTestForm.BeTestFunction(1,3)=4,'Second Test fail');
end;
//Register TestCase
initialization
TestFramework.RegisterTest(TTestCaseFirst.Suite);
end.