Code
1Dunit初步详解
2
3文章出处:51testing论坛 作者:磊哥 发布时间:2006-06-19
4
5 本文讲解了Dunit的最基本使用方法,是我再初识Dunit的一点积攒,现在总结出来供Dunit学习者起步之用,至于更深入的研究还靠读者们的细心研究与不断的实践再实践!本文如有讲解错误之处还请读者朋友们积极提出,我们共同讨论,共同进步!
6如有转载请注明作者及出处。
7Dunit初步详解
8
9一、安装Dunit
10将dunit-9.2.1(本文以dunit-9.2.1为例)解压缩到文件夹F:\DUnit案例\dunit-9.2.1,
11(dunit-9.2.1无需安装,它提供的是测试框架和一些测试类,只需要在Delphi中调用即可)
12主要类型:
13TestFramework.pas 框架本身
14TestExtensions.pas 可用来扩充测试案例的 Decorator 类別
15GUITesting.pas 用来测试使用者介面的类別
16TextTestRunner.pas 在主控台模式下执行测试的函式
17GUITestRunner.pas 此框架的图形化使用者界面
18GUITestRunner.dfm GUITestRunner Form
19二、设计测试案例
20本文以Delphi 6开发环境为例,在这里我介绍两种单元测试案例:
21一种是简单的不需调用其他Project的测试案例TestCase1;
22另一种是调用其他Project中函数的测试案例TestCase2。
23下面就开始我们的Dunit之旅:
24TestCase1
251.首先将Dunit的路径加载到Delphi中,
26Tools ->Environment ->Options ->Library->Library path,
27注意:一定要把路径名给到src文件夹下。
282.新建一个项目,关闭Delphi自动启动的Form1,Unit1.新建一个没有Form的项目,File->New->Unit,保存:将项目保存为Project1Test.dpr,Unit1保存为Project1TestCases.pas。
29在Project1TestCases.pas中敲入如下代码:
30(你可以用如下代码替换掉Project1TestCases.pas中的代码,假如你很懒的话!)
31unit Project1TestCases;
32interface
33uses
34TestFrameWork; // TestFrameWork是每个测试用例都必须使用的类
35type
36TTestCaseFirst = class(TTestCase) // TTestCase包含在TestFrameWork中
37published
38procedure TestFirst; // 声明一个测试用例
39end;
40implementation
41procedure TTestCaseFirst.TestFirst;
42begin
43Check(1 + 1 = 2, 'Catastrophic arithmetic failure!');
44end;
45initialization
46TestFramework.RegisterTest(TTestCaseFirst.Suite); // TestFramework.RegisterTest 程序会把传入的测试案例组件注冊到此框架的注冊系统里
47end.
483.修改Project主文件,点击Project ->View Source,查看项目的源码。把 TestFrameWork 以及 GUITestRunner 加到 uses 子句里,然后清除预制的 Application 程序代码,並以下面的程序码取代:
49program Project1Test;
50uses
51Forms,
52TestFrameWork,
53GUITestRunner,
54Project1TestCases in 'Project1TestCases.pas';
55{$R *.RES}
56begin
57Application.Initialize;
58GUITestRunner.RunRegisteredTests;
59end.
604.Ok了,现在开始运行程序,将会出现DUnit 的 GUITestRunner 窗体,点击一下Run按钮,将会执行我们的测试用例。
61这里我们只有一个测试用例,测试用例执行正确。
62TestCase2
631. 首先,同样我们要将Dunit的路径加载到Delphi中,然后我们建立一个别测试的Project,并命名为BeTestProject.dpr,将From1命名为BeTestForm,Unit1命名为BeTestUnit.pas。
642. 在BeTestUnit中敲入代码如下:
65unit BeTestUnit;
66interface
67uses
68Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
69Dialogs;
70type
71TForm1 = class(TForm)
72private
73{ Private declarations }
74public
75function BeTestFunction(i,j:integer):integer;
76{ Public declarations }
77end;
78var
79BeTestForm: TForm1;
80implementation
81function TForm1.BeTestFunction(i,j:integer):integer;
82begin
83result:=i*j;
84end;
85{$R *.dfm}
86end.
873.在BeTestProject的源码如下:
88program BeTestProject;
89uses
90Forms,
91BeTestUnit in 'BeTestUnit.pas' {Form1};
92{$R *.res}
93begin
94Application.Initialize;
95Application.CreateForm(TForm1, BeTestForm);
96Application.Run;
97end.
98注:由于此被测单元代码简单易懂,这里就不进行注释了!
994.下面编写用例,先新建一个项目,关闭Delphi自动启动的Form1,Unit1.新建一个没有Form的File->New->Unit,保存:将项目保存为TestCaseProject.dpr,Unit1保存为TestUnit.pas。
100在TestUnit中敲入如下代码:
101unit TestUnit;
102interface
103uses
104TestFrameWork,BeTestUnit;
105Type
106TTestCaseFirst=class(TTestCase)
107published
108procedure TestFirst;
109procedure TestSecond;
110end;
111implementation
112procedure TTestCaseFirst.TestFirst;
113begin
114Check(BeTestForm.BeTestFunction(1,3)=3,'First Test fail');
115end;
116procedure TTestCaseFirst.TestSecond;
117begin
118Check(BeTestForm.BeTestFunction(1,3)=6,'Second Test fail');
119end;
120initialization
121TestFramework.RegisterTest(TTestCaseFirst.Suite);
122end.
1235.修改Project主文件,点击Project->View Source,查看项目的源码。並以下面的程序码取代:
124program TestCaseProject;
125uses
126Forms,
127TestFrameWork,
128GUITestRunner,
129TestUnit in 'TestUnit.pas';
130{$R *.res}
131begin
132Application.Initialize;
133//Application.Run;
134GUITestRunner.RUnRegisteredTests;
135end.
1366.一切搞定,注意一点(很重要):被测单元和测试用例一定要保存在同一个目录下!
137下面开始运行我们的TestCase.,点击运行按钮。
138我们这里有一个TestSecond是错误的,所以执行中会有Failures出现!
139下面附上两个案例的源码文件!
140
141
142
144
145Dunit的路径加载到Delphi中
146
147
148
149TestCase1 运行结果
150
151
152
153TestCase2 运行结果
154
155
156
157
158
1Dunit初步详解
2
3文章出处:51testing论坛 作者:磊哥 发布时间:2006-06-19
4
5 本文讲解了Dunit的最基本使用方法,是我再初识Dunit的一点积攒,现在总结出来供Dunit学习者起步之用,至于更深入的研究还靠读者们的细心研究与不断的实践再实践!本文如有讲解错误之处还请读者朋友们积极提出,我们共同讨论,共同进步!
6如有转载请注明作者及出处。
7Dunit初步详解
8
9一、安装Dunit
10将dunit-9.2.1(本文以dunit-9.2.1为例)解压缩到文件夹F:\DUnit案例\dunit-9.2.1,
11(dunit-9.2.1无需安装,它提供的是测试框架和一些测试类,只需要在Delphi中调用即可)
12主要类型:
13TestFramework.pas 框架本身
14TestExtensions.pas 可用来扩充测试案例的 Decorator 类別
15GUITesting.pas 用来测试使用者介面的类別
16TextTestRunner.pas 在主控台模式下执行测试的函式
17GUITestRunner.pas 此框架的图形化使用者界面
18GUITestRunner.dfm GUITestRunner Form
19二、设计测试案例
20本文以Delphi 6开发环境为例,在这里我介绍两种单元测试案例:
21一种是简单的不需调用其他Project的测试案例TestCase1;
22另一种是调用其他Project中函数的测试案例TestCase2。
23下面就开始我们的Dunit之旅:
24TestCase1
251.首先将Dunit的路径加载到Delphi中,
26Tools ->Environment ->Options ->Library->Library path,
27注意:一定要把路径名给到src文件夹下。
282.新建一个项目,关闭Delphi自动启动的Form1,Unit1.新建一个没有Form的项目,File->New->Unit,保存:将项目保存为Project1Test.dpr,Unit1保存为Project1TestCases.pas。
29在Project1TestCases.pas中敲入如下代码:
30(你可以用如下代码替换掉Project1TestCases.pas中的代码,假如你很懒的话!)
31unit Project1TestCases;
32interface
33uses
34TestFrameWork; // TestFrameWork是每个测试用例都必须使用的类
35type
36TTestCaseFirst = class(TTestCase) // TTestCase包含在TestFrameWork中
37published
38procedure TestFirst; // 声明一个测试用例
39end;
40implementation
41procedure TTestCaseFirst.TestFirst;
42begin
43Check(1 + 1 = 2, 'Catastrophic arithmetic failure!');
44end;
45initialization
46TestFramework.RegisterTest(TTestCaseFirst.Suite); // TestFramework.RegisterTest 程序会把传入的测试案例组件注冊到此框架的注冊系统里
47end.
483.修改Project主文件,点击Project ->View Source,查看项目的源码。把 TestFrameWork 以及 GUITestRunner 加到 uses 子句里,然后清除预制的 Application 程序代码,並以下面的程序码取代:
49program Project1Test;
50uses
51Forms,
52TestFrameWork,
53GUITestRunner,
54Project1TestCases in 'Project1TestCases.pas';
55{$R *.RES}
56begin
57Application.Initialize;
58GUITestRunner.RunRegisteredTests;
59end.
604.Ok了,现在开始运行程序,将会出现DUnit 的 GUITestRunner 窗体,点击一下Run按钮,将会执行我们的测试用例。
61这里我们只有一个测试用例,测试用例执行正确。
62TestCase2
631. 首先,同样我们要将Dunit的路径加载到Delphi中,然后我们建立一个别测试的Project,并命名为BeTestProject.dpr,将From1命名为BeTestForm,Unit1命名为BeTestUnit.pas。
642. 在BeTestUnit中敲入代码如下:
65unit BeTestUnit;
66interface
67uses
68Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
69Dialogs;
70type
71TForm1 = class(TForm)
72private
73{ Private declarations }
74public
75function BeTestFunction(i,j:integer):integer;
76{ Public declarations }
77end;
78var
79BeTestForm: TForm1;
80implementation
81function TForm1.BeTestFunction(i,j:integer):integer;
82begin
83result:=i*j;
84end;
85{$R *.dfm}
86end.
873.在BeTestProject的源码如下:
88program BeTestProject;
89uses
90Forms,
91BeTestUnit in 'BeTestUnit.pas' {Form1};
92{$R *.res}
93begin
94Application.Initialize;
95Application.CreateForm(TForm1, BeTestForm);
96Application.Run;
97end.
98注:由于此被测单元代码简单易懂,这里就不进行注释了!
994.下面编写用例,先新建一个项目,关闭Delphi自动启动的Form1,Unit1.新建一个没有Form的File->New->Unit,保存:将项目保存为TestCaseProject.dpr,Unit1保存为TestUnit.pas。
100在TestUnit中敲入如下代码:
101unit TestUnit;
102interface
103uses
104TestFrameWork,BeTestUnit;
105Type
106TTestCaseFirst=class(TTestCase)
107published
108procedure TestFirst;
109procedure TestSecond;
110end;
111implementation
112procedure TTestCaseFirst.TestFirst;
113begin
114Check(BeTestForm.BeTestFunction(1,3)=3,'First Test fail');
115end;
116procedure TTestCaseFirst.TestSecond;
117begin
118Check(BeTestForm.BeTestFunction(1,3)=6,'Second Test fail');
119end;
120initialization
121TestFramework.RegisterTest(TTestCaseFirst.Suite);
122end.
1235.修改Project主文件,点击Project->View Source,查看项目的源码。並以下面的程序码取代:
124program TestCaseProject;
125uses
126Forms,
127TestFrameWork,
128GUITestRunner,
129TestUnit in 'TestUnit.pas';
130{$R *.res}
131begin
132Application.Initialize;
133//Application.Run;
134GUITestRunner.RUnRegisteredTests;
135end.
1366.一切搞定,注意一点(很重要):被测单元和测试用例一定要保存在同一个目录下!
137下面开始运行我们的TestCase.,点击运行按钮。
138我们这里有一个TestSecond是错误的,所以执行中会有Failures出现!
139下面附上两个案例的源码文件!
140
141
142
144
145Dunit的路径加载到Delphi中
146
147
148
149TestCase1 运行结果
150
151
152
153TestCase2 运行结果
154
155
156
157
158