《重构》 — Delphi示例:影片出租店程序(2、单元测试)

说明:
重构的第一个步骤永远相同:为即将修改的代码建立一组可靠的测试环境。

注意:
(1)、使用"CnPack"自带的DUNIT单元测试
clip_image002


(2)、使用DUNIT单元测试工具实现,其中
* TestFrameWork是每个TestCase都必须使用的,后面要使用的TTestCase等类的定义都在TestFrameWork中。
* Dunit是通过RTTI(RunTime Type Information)来寻找并自动注册TestCase,具体实现是通过代码"TestFramework.RegisterTest(TTest.Suite); "
* 测试方法是没有参数的Procedure ,而且必须被申明为Published。
* Check方法用于检测测试结果,如果没有通过的话,Dunit将报错,错误提示在Check方法的第二个参数中定义。

代码:
 
clip_image002[5]

//{$DEFINE DUNIT_CONSOLE_MODE}

program Project2;

uses
    SysUtils,
    TestFramework,
    TestExtensions,
    GUITestRunner,
    TextTestRunner,
    uMovieTest in 'uMovieTest.pas';

{$IFDEF DUNIT_CONSOLE_MODE}
{$APPTYPE CONSOLE}
{$ELSE}
{$R *.RES}
{$ENDIF}

begin
{$IFDEF DUNIT_CONSOLE_MODE}
    if not FindCmdLineSwitch('Graphic', ['-', '/'],True) then
        TextTestRunner.RunRegisteredTests(rxbHaltOnFailures)
    else
{$ENDIF}
        GUITestRunner.RunRegisteredTests;
end.

unit uMovieTest;

interface

uses
    Windows,SysUtils,Classes,TestFramework,TestExtensions;

type
    TTest = class(TTestCase)
    published
        procedure Test;
    end;

implementation

uses uMovie;

procedure TTest.Test;
const
    CNT_Text = 'Rental Record for ZhangSan'#$D#$A
        + 'aaa 2'#$D#$A
        + 'bbb 3'#$D#$A
        + 'ccc 1.5'#$D#$A
        + 'Amount owed is 6.5'#$D#$A
        + 'You earned 4 frequent renter points';
var
    ACustomer: TCustomer;
    AMovie1,AMovie2,AMovie3: TMovie;
    AText: string;
begin
    AMovie1 := TMovie.Create('aaa',REGULAR);
    AMovie2 := TMovie.Create('bbb',NEW_RELEASE);
    AMovie3 := TMovie.Create('ccc',CHILDRENS);
    try
        ACustomer := TCustomer.Create('ZhangSan');
        try
            with ACustomer do
            begin
                AddRental(TRental.Create(AMovie1,1));
                AddRental(TRental.Create(AMovie2,2));
                AddRental(TRental.Create(AMovie3,3));
            end;
            AText := ACustomer.Statement;
            Check(AText = CNT_Text, 'Test fail');
        finally
            ACustomer.Free;
        end;
    finally
        AMovie1.Free;
        AMovie2.Free;
        AMovie3.Free;
    end;
end;

initialization
    TestFramework.RegisterTest(TTest.Suite);

end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值