Dunit的感悟

2016-02-19 12:49 6 1 收藏

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享Dunit的感悟吧。

【 tulaoshi.com - 编程语言 】

Dunit的感悟?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

DunitTextTestRunner方式测试

在Dunit的TextTestRunner测试方式中需在工程文件中引用TextTestRunner而非GUITestRunner。

在Dunit的TextTestRunner测试方式中,Dunit提供了TRunnerExitBehavior数据类型,在dunit中TRunnerExitBehavior的定义如下:

TRunnerExitBehavior = ( rxbContinue, rxbPause, rxbHaltOnFailures);

从该数据类型的定义可得知,该数据类型定义了TextTestRunner的退出行为,即何种方式结束当前的测试。只需在TextTestRunner执行RunRegisteredTests(ExitBehavior)时把需要的退出行为作为参数传入,即可控制TextTestRunne的退出行为。具体如下:

    if  FindCmdLineSwitch('p', ['-', '/'], true)  then

      ExitBehavior := rxbPause

    else  if  FindCmdLineSwitch('h', ['-', '/'], true)  then

           ExitBehavior := rxbHaltOnFailures

   else

           ExitBehavior := rxbContinue;

  TextTestRunner.RunRegisteredTests(ExitBehavior);

 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

TestCase的多种Registration方式

可用Test Suites,在Dunit的Examples的Registry用三个项目描述了不同的Registration

在第一个项目中Project文件如下

program RegistryTest;

uses

  TestFramework,

  GUITestRunner,

  RegistryUnitTest;

{$R *.RES}

function MasterTestSuite: ITestSuite;   //请注意该函数与单元文件的关系

begin

  Result := TTestSuite.Create;

  Result.AddTest(RegistryUnitTest.Suite);

end;

begin

  GUITestRunner.RunTest(MasterTestSuite);

end.

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

单元文件如下:

type

  TTestRegistry = class(TTestCase)

  private

    FInstallPath: string;

    FModData: string;

    FReg: TRegistry;

  public

    procedure Setup; override;

    procedure TearDown; override;

  published

    procedure TestRegistrySample;

  end;

  function Suite: ITestSuite;

implementation

function Suite: ITestSuite;     //请注意该函数与Project文件的关系

begin

  Suite := TTestSuite.Create(TTestRegistry);

end;

 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

在第二个项目中Project文件如下(其它部分与第一项目相同)

function MasterTestSuite: ITestSuite;   //请注意该函数与单元文件的关系

begin

  Result := TTestSuite.Create;

  Result.AddTest(RegistryUnitTest.Suite);

end;

begin

  GUITestRunner.RunTest(MasterTestSuite);

end.

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

单元文件(其他部分与第一项目中单元文件相同)

function Suite: ITestSuite;    //请注意该函数与Project文件的关系

begin

  Suite := TTestRegistry.Suite;

end;

 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

在第三个项目中Project文件如下(其它部分与第一项目相同):

function MasterTestSuite: ITestSuite;

begin

  Result := TTestSuite.Create;

  Result.AddTest(RegistryUnitTest.Suite);

end;

 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

begin

  GUITestRunner.RunTest(MasterTestSuite);

end.

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

单元文件(其他部分与第一项目中单元文件相同)

function Suite: ITestSuite;    //请注意该函数与Project文件的关系

begin

  Suite := TTestSuite.Create(TTestRegistry);

end;

 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

Registration的相关方法:

procedure RegisterTest(SuitePath: string; test: ITest); overload;

procedure RegisterTest(test: ITest);  overload;

procedure RegisterTests(SuitePath: string; const Tests: array of ITest);  overload;

procedure RegisterTests(const Tests: array of ITest);  overload;

function  RegisteredTests: ITestSuite;

procedure ClearRegistry;

 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

DunitException测试:

TexceptionTestCase没有实现,但是Dunit在源码附加examplesestexception目录中有一个如何测试Exception的例子。主要的实现在procedure TTestMyObject.CheckException和procedure TTestMyObjectOverrideRunTest.RunTest中。

在异常测试的例子中主要有三个方法,除前面所说的两个外还有一个assert方法

procedure TTestMyObject.CheckException(AMethod: TTestMethod;

  AExceptionClass: ExceptionClass);

begin

  try

    AMethod;

    fail('Expected exception not raised');

  except

    on E: Exception do

    begin

      if E.ClassType AExceptionClass then

        raise;

    end

  end;

end;

 

 

procedure TTestMyObject.testMyObject;

begin

  try

    FMyObject.DoSomething;

  except

    assert(false);

  end;

end;

 

procedure TTestMyObjectOverrideRunTest.RunTest(testResult :TTestResult);

begin

  try

    inherited runTest(testResult);

    if FExpectedException nil then

      fail('Excepted Exception did not occur');

  except

     on E: Exception do

     begin

       if FExpectedException = nil then

         raise

       else

         if E.ClassType FExpectedException then

           raise;

     end;

  end;

  { clear the exception until the next test registers an Exception }

  FExpectedException := nil;

end;

 

 

Check的相关方法:

procedure Check(condition: boolean; msg: string = '');

procedure CheckEquals(expected, actual: extended; msg: string = '');

procedure CheckEquals(expected, actual: extended; delta: extended; msg: string = '');

procedure CheckEquals(expected, actual: integer; msg: string = '');   

procedure CheckEquals(expected, actual: string; msg: string = ''); 

procedure CheckEquals(expected, actual: boolean; msg: string = '');   

procedure CheckEqualsBin(expected, actual: longword; msg: string = '';

digits: integer=32);

procedure CheckEqualsHex(expected, actual: longword; msg: string = '';

digits: integer=8);

procedure CheckNotEquals(expected, actual: integer; msg: string = '');   

procedure CheckNotEquals(expected: extended; actual: extended; delta: extended = 0;

msg: string = '');

procedure CheckNotEquals(expected, actual: string; msg: string = '');

procedure CheckNotEquals(expected, actual: boolean; msg: string = '');   

procedure CheckNotEqualsBin(expected, actual: longword; msg: string = '';

 digits: integer=32);

procedure CheckNotEqualsHex(expected, actual: longword; msg: string = '';

digits: integer=8);

procedure CheckNotNull(obj :IUnknown; msg :string = '');

procedure CheckNull(obj: IUnknown; msg: string = '');

procedure CheckSame(expected, actual: IUnknown; msg: string = '');   

procedure CheckSame(expected, actual: TObject; msg: string = '');

procedure CheckNotNull(obj: TObject; msg: string = '');

procedure CheckNull(obj: TObject; msg: string = '');

procedure CheckException(AMethod: TTestMethod; AExceptionClass: TClass;

 msg :string = '');

procedure CheckEquals(  expected, actual: TClass; msg: string = '');

procedure CheckInherits(expected, actual: TClass; msg: string = '');   

procedure CheckIs(obj :TObject; klass: TClass; msg: string = '');

 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1602073.html

延伸阅读
标签: 网络游戏
《大冲锋》玩家心情杂谈 玩后的体会与感悟 转载自官方论坛 作者:沙小加 玩《 大冲锋 》有一段日子了,总体感觉还是不错的,无论是画面或人物,都比以往的 游戏 要好看一些,可就是当你被对方杀死都后,还要有个定格,有定格也行,可这定格的时间也太长了点吧!?在加上读秒,感觉时间就更长了。希望可以把时...
分享《倩女幽魂》医医师的一些感悟 让新手少走点弯路,125小医生的一些感悟。 从5月份一直玩到现在,花了一千多块钱,法攻1万1,双防6200,连翘32级,关宁经常是第三第四,有时也第一。 下面步入正题: 技能 续毒点满,连翘有钱尽量点,甘露点到30,义气安魂尽量点,为什么甘露点到25,义气安魂实在太费蓝蓝跟不上,...
标签: 网络游戏
《大冲锋》华南一区小火焰兵的感悟 正式玩这个 游戏 大概没一个星期,发现除了歼灭模式,其余任何模式如果火焰兵没有打飞到MVP……那么你就不是一个合格的火焰兵(理论上,也许对面很强)。 火焰兵的优势:机动力最强大、近身喷头相当于秒杀,对于低血糖(阻击、突击兵)那是相当致命! 缺点:自己就是低血糖、...
《火焰之纹章:觉醒》感悟:人偶 莉姆斯迪拉作为一个人偶而存在,一切仅由她主人的安排。这是一个没有灵魂的人偶生来就背负的宿命。她,有着绝美的外表,苍白的皮肤,血红的双唇,还有那异于常人的金黄色瞳孔。她美地凄凉,风筝向往着天空的自由,却无法摆脱线的束缚。主人的利益高于一切,这是她身体内唯一的信号。 为此,她帮主人完成一个又...
让胎儿从艺术中感悟美 对美的追逐,是女人永远的话题。准妈妈,曾是豆蔻年华的少女,也曾是娇羞幸福的新娘,如今腹中孕育着一个小生命,身材也日益丰满,但心中对于美的向往却依然如旧。让我们一起进行一场关于美的胎教,在生活中享受美、感悟美、创造美,与胎宝宝一起感受280天美丽的互动。 从艺术中感悟美 与自然美相呼应的,是人类创造...

经验教程

539

收藏

51
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部