dunit 测试应用

今天 用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,继承现有控件类,重载方法及事件,编写事件方法及属性,注册方法及事件,注册所放控件位置,也就是面板。不过要想写起控件来随意。原理性的知识必需知道。多看一下消息,看一下消息是怎么实现的。

下了。今天下午过去了。明天周末,期望会是一个很美好的周末。下周开始一周新的工作。努力。

 

 

阅读更多
个人分类: Delphi
上一篇看客
下一篇ClientDataSet的用法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭