今天 用DUNIT来进行单元测试,发现测试不通过。可是如果代码量太大,那么从中找到ERROR,是不可想象的。后来发现在DUNIT里面可以测试跳转到错误代码行,不错,终于发现错误,是这样的。这只是一个小测试,可以看出,DUNIT对测试单元的优点,及方便性。
unit Project1TestCases;
interface
uses
TestFramework;
type
TTestCaseFirst = class(TTestCase)
published
procedure testfirst;
end;
implementation
procedure TTestCaseFirst.TestFirst;
begin
Check( 'ado' = 'Ado', 'Catastrophic arithmetic failure!');
end;
initialization
TestFramework.RegisterTest(TTestCaseFirst.Suite); // TestFramework.RegisterTest 程序会把传入的测试案例组件注冊到此框架的注冊系统里
end.
这是一段小测试代码,但从中可以发现,Check( 'ado' = 'Ado', 'Catastrophic arithmetic failure!');是一句错误的代码,但在实际的代码编译过程中,不会检测到错误,这时只有借助DUNIT来进行单元的测试。打开'VIEW SOURE ' 必需要加入TestFrameWork,
GUITestRunner,两个测试单元,这样运行系统时,会打开DUNIT的测试窗体。然后执行, 就会找出错误,很方便。第一次用。
而后又了解了一个其它的测试工具。
DUNIT:进行单元测试工具;
GEXPERT:性能测试工具;
MEMPROOF:内存测试工具,会检测出系统有没有分配的空间没有释放,有没有分配的资源没有注销,都可以从中发现这些东西。
第一次了解DELPHI专用的测试工具,以后慢慢学习。
下午,本来没有做安排,可是公司要加班,找点事干。突然想起了,上一次用到的一个自定义控件,控件有错误,但不知道出在哪了。继承TPANEL类的一个设计打印控件,但是发现预览的时候不会显示上面控件的信息。不知道是何原因。今天下午就去探索一下有关自定义控件的问题吧。
自己了写了一个小的控件,然后可以实现点击后自动连接到我的BLOG上。虽然功能单单,但可以说明一个问题,自定义控件的开发流程。
unit SWURLLabel;
interface
uses
Windows, Classes, Controls, StdCtrls, SysUtils, Forms,
Graphics, ShellAPI;
type
TSWURLLabel = class(TLabel) // 从TLabel类派生
private
FOnBeforeExecuteURL: TNotifyEvent; // 指向执行URL之前要调用的过程
FURL: String; // URL字符串
procedure SetURL(Value:String);
protected
procedure Click; override; // 重载TLabel的Click方法
public
constructor Create(AOwner:TComponent); override; // 构造函数
function ExecuteURL: Boolean; // 方法,执行URL
published
property OnBeforeExecuteURL: TNotifyEvent read FOnBeforeExecuteURL write FOnBeforeExecuteURL default nil;
// property OnExecuteURL: TNotifyEvent read FOnExecuteURL write FOnExecuteURL default nil;
property URL:String read FURL write SetURL;
end;
procedure Register;
implementation
const DefaultURL:String = 'http://blog.csdn.net/autio_net';
{ 重载TLabel的Click方法 }
procedure TSWURLLabel.Click;
begin
inherited Click; // 执行TLabel的Click过程
ExecuteURL; // 调用ExecuteURL过程来执行URL
end;
{ 构造函数,初始化属性 }
constructor TSWURLLabel.Create(AOwner:TComponent);
begin
inherited Create(AOwner); // 首先调用父类的构造函数
FURL := DefaultURL; // URL属性值初始化为默认值
Caption := DefaultURL; // Caption
Font.Color := clBlue; // 颜色默认为蓝色
Font.Style := [fsUnderline]; // 字体默认为带下划线
Cursor := crHandPoint; // 光标形状默认为手掌形
end;
{ 方法,调用Windows API执行URL }
function TSWURLLabel.ExecuteURL;
var
ZFileName:array[0..255] of char;
begin
if Assigned(FOnBeforeExecuteURL) then
FOnBeforeExecuteURL(Self); // 若指定了事件处理过程则调用它
if Length(FURL)>0 then
begin
// 当URL不为空时执行
StrPCopy(ZFileName, FURL);
ShellExecute(Application.Handle, nil,
ZFileName, nil, nil, SW_SHOWNORMAL);
end;
end;
{ 登记新构件的过程 }
procedure Register;
begin
// 第一个参数是面板页的名字,第二个参数是新构件的类名
RegisterComponents('Standard', [TSWURLLabel]);
end;
{ 私有方法,设置URL属性值 }
procedure TSWURLLabel.SetURL(Value:String);
begin
FURL := Value;
if csDesigning in ComponentState then
Caption := Value;
end;
end.
这是自定义控件的CODE,继承现有控件类,重载方法及事件,编写事件方法及属性,注册方法及事件,注册所放控件位置,也就是面板。不过要想写起控件来随意。原理性的知识必需知道。多看一下消息,看一下消息是怎么实现的。
下了。今天下午过去了。明天周末,期望会是一个很美好的周末。下周开始一周新的工作。努力。