DemoHaltRepeatingOnError.pas
上传用户:yjb1804
上传日期:2021-01-30
资源大小:3105k
文件大小:6k
源码类别:

Email服务器

开发平台:

Delphi

  1. { $Id: DemoHaltRepeatingOnError.pas,v 1.1 2006/07/19 02:54:36 judc Exp $ }
  2. {: DUnit: An XTreme testing framework for Delphi programs.
  3.    @author  The DUnit Group.
  4.    @version $Revision: 1.1 $
  5. }
  6. (*
  7.  * The contents of this file are subject to the Mozilla Public
  8.  * License Version 1.1 (the "License"); you may not use this file
  9.  * except in compliance with the License. You may obtain a copy of
  10.  * the License at http://www.mozilla.org/MPL/
  11.  *
  12.  * Software distributed under the License is distributed on an "AS
  13.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  14.  * implied. See the License for the specific language governing
  15.  * rights and limitations under the License.
  16.  *
  17.  * The Original Code is DUnit.
  18.  *
  19.  * The Initial Developers of the Original Code are Kent Beck, Erich Gamma,
  20.  * and Juancarlo A馿z.
  21.  * Portions created The Initial Developers are Copyright (C) 1999-2000.
  22.  * Portions created by The DUnit Group are Copyright (C) 2000.
  23.  * All rights reserved.
  24.  *
  25.  * Contributor(s):
  26.  * Kent Beck <kentbeck@csi.com>
  27.  * Erich Gamma <Erich_Gamma@oti.com>
  28.  * Juanco A馿z <juanco@users.sourceforge.net>
  29.  * Chris Morris <chrismo@users.sourceforge.net>
  30.  * Jeff Moore <JeffMoore@users.sourceforge.net>
  31.  * Kris Golko <neuromancer@users.sourceforge.net>
  32.  * The DUnit group at SourceForge <http://dunit.sourceforge.net>
  33.  *
  34.  *)
  35.  
  36. unit DemoHaltRepeatingOnError;
  37. interface
  38. uses
  39.   TestFramework,
  40.   TestExtensions;
  41. const
  42.   COUNT_MAX = 5;
  43. type
  44.   ITestStub = interface(ITest)
  45.     function GetCounter: integer;
  46.   end;
  47.   TTestStub = class(TTestCase, ITestStub)
  48.   protected
  49.     FCounter: integer;
  50.   public
  51.     function GetCounter: integer;
  52.   published
  53. {$IFDEF CLR}[Test]{$ENDIF}
  54.     procedure test;
  55.   end;
  56.   TTestStubTest = class(TTestCase)
  57.   private
  58.     FTestResult: TTestResult;
  59.     FTestStub: ITestStub;
  60.   public
  61.     procedure SetUp; override;
  62.     procedure TearDown; override;
  63.   end;
  64.   TTestRepeatedTest = class(TTestStubTest)
  65.   private
  66.     FIterations: integer;
  67.     FRepTest: ITest;
  68.   public
  69.     procedure SetUp; override;
  70.     procedure TearDown; override;
  71.   published
  72. {$IFDEF CLR}[Test]{$ENDIF}
  73.     procedure testRepeatedTest;
  74. {$IFDEF CLR}[Test]{$ENDIF}
  75.     procedure testWithCounting;
  76.     procedure testWithCountingHaltOnTestFailed;
  77.   end;
  78.   TCountCase = class(TTestCase)
  79.   private
  80.     FCounter : Integer;
  81.     FTotal   : Integer;
  82.     FLast    : Integer;
  83.   public
  84.     procedure SetUp; override;
  85.   published
  86. {$IFDEF CLR}[Test]{$ENDIF}
  87.     procedure CountTest; virtual;
  88.   end;
  89.   TCountCaseFails = class(TTestCase)
  90.   private
  91.     FCounter : Integer;
  92.     FTotal   : Integer;
  93.     FLast    : Integer;
  94.   public
  95.     procedure SetUp; override;
  96.   published
  97. {$IFDEF CLR}[Test]{$ENDIF}
  98.     procedure CountTestFails; virtual;
  99.   end;
  100. implementation
  101. uses
  102.   SysUtils;
  103. { TTestStub }
  104. function TTestStub.GetCounter: integer;
  105. begin
  106.   Result := FCounter;
  107. end;
  108. procedure TTestStub.test;
  109. begin
  110.   check(true);
  111.   Inc(FCounter);
  112. end;
  113. { TTestStubTest }
  114. procedure TTestStubTest.SetUp;
  115. begin
  116.   inherited;
  117.   FTestStub := TTestStub.Create('test');
  118.   FTestResult := TTestResult.Create;
  119. end;
  120. procedure TTestStubTest.TearDown;
  121. begin
  122.   FTestResult.Free;
  123.   FTestStub := nil;
  124.   inherited;
  125. end;
  126. { TTestRepeatedTest }
  127. procedure TTestRepeatedTest.SetUp;
  128. begin
  129.   inherited;
  130.   FIterations := COUNT_MAX;
  131.   FRepTest := TRepeatedTest.Create(FTestStub, FIterations);
  132. end;
  133. procedure TTestRepeatedTest.TearDown;
  134. begin
  135.   FRepTest := nil;
  136.   FRepTest := nil;
  137.   inherited;
  138. end;
  139. procedure TTestRepeatedTest.testRepeatedTest;
  140. begin
  141.   check(FRepTest.CountTestCases = COUNT_MAX);
  142.   check(FTestStub.getEnabled);
  143.   FRepTest.Run(FTestResult);
  144.   check(FTestResult.wasSuccessful);
  145.   check(FTestStub.GetCounter = COUNT_MAX);
  146. end;
  147. procedure TTestRepeatedTest.testWithCounting;
  148. var
  149.   CountCase :ITest;
  150.   AREsult   :TTestResult;
  151. begin
  152.   CountCase := TRepeatedTest.Create(TCountCase.Create('CountTest'), COUNT_MAX);
  153.   AResult := CountCase.Run;
  154.   try
  155.     check(AResult.runCount     = COUNT_MAX, 'wrong runCount, was ' + IntToStr(AResult.runCount) );
  156.     check(AResult.failureCount = 0, 'wrong failureCount, was ' + IntToStr(AResult.failureCount) );
  157.     check(AResult.errorCount   = 0, 'wrong errorCount, was ' + IntToStr(AResult.errorCount) );
  158.   finally
  159.     AResult.Free
  160.   end
  161. end;
  162. { TCountCase }
  163. procedure TCountCase.CountTest;
  164. begin
  165.    Inc(FCounter);
  166.    check(FCounter = 1,  'must be one, or SetUp was not called');
  167.    Inc(FTotal);
  168.    check(FTotal   >= 1, 'total should be at least one');
  169.    check(FTotal   = (FLast+1),  'total should be increment');
  170.    FLast := FTotal;
  171. end;
  172. procedure TCountCase.SetUp;
  173. begin
  174.   FCounter := 0;
  175. end;
  176. procedure TTestRepeatedTest.testWithCountingHaltOnTestFailed;
  177. var
  178.   CountCase :IRepeatedTest;
  179.   AResult   :TTestResult;
  180. begin
  181.   CountCase := TRepeatedTest.Create(TCountCaseFails.Create('CountTestFails'), COUNT_MAX);
  182.   CountCase.HaltOnError := True;    {******** Example use of property *********}
  183.   AResult := (CountCase as ITest).Run;
  184.   try
  185.     check(AResult.runCount     = 1, 'wrong runCount, was ' + IntToStr(AResult.runCount) );
  186.     check(AResult.failureCount = 1, 'wrong failureCount, was ' + IntToStr(AResult.failureCount) );
  187.     check(AResult.errorCount   = 0, 'wrong errorCount, was ' + IntToStr(AResult.errorCount) );
  188.   finally
  189.     AResult.Free
  190.   end
  191. end;
  192. { TCountCaseFails }
  193. procedure TCountCaseFails.CountTestFails;
  194. begin
  195.    Inc(FCounter);
  196.    check(FCounter = 1,  'must be one, or SetUp was not called');
  197.    Inc(FTotal);
  198.    check(FTotal   >= 1, 'total should be at least one');
  199.    check(FTotal   = (FLast+1),  'total should be increment');
  200.    FLast := FTotal;
  201.    Check(False, 'Forced Fail to halt repetition');  {******* Test fails *********}
  202. end;
  203. procedure TCountCaseFails.SetUp;
  204. begin
  205.   FCounter := 0;
  206. end;
  207. initialization
  208.   RegisterTests('TestExtensions Suite',[ TTestRepeatedTest.Suite]);
  209. end.