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

Email服务器

开发平台:

Delphi

  1. unit Unit1Test;
  2. interface
  3. uses
  4.   SysUtils, Classes, TestFramework, Unit1;
  5. type
  6.   ExceptionClass = class of Exception;
  7.   TTestMethod = procedure of object;
  8.   { by chrismo -- test cases that trap for specific exception classes have
  9.     a lot of duplication. This test case attempts to refactor the common code
  10.     into a CheckException method. But it's awkward to use. }
  11.   // refactoring out calls to trap specific exception classes
  12.   TTestMyObject = class(TTestCase)
  13.   private
  14.     FMyObject: TMyObject;
  15.     FTestResult: boolean;
  16.     FTestString: string;
  17.   protected
  18.     procedure CallStrToIntIsZero;
  19.     procedure CheckException(AMethod: TTestMethod;
  20.       AExceptionClass: ExceptionClass);
  21.   public
  22.     procedure Setup; override;
  23.     procedure TearDown; override;
  24.   published
  25.     procedure testMyObject;
  26.     procedure TestEMyObject;
  27.     procedure TestStrToIntIsZero;
  28.   end;
  29.   { majohnson replies with a TTestCase that overrides RunTest ... essentially
  30.     putting the functionality of chrismo's CheckException method into
  31.     RunTest. Simpler, cleaner, easy to use. }
  32.   TTestMyObjectOverrideRunTest = class(TTestCase)
  33.   private
  34.     FExpectedException: ExceptionClass;
  35.     FMyObject: TMyObject;
  36.   public
  37.     procedure SetExpectedException(Value :ExceptionClass);
  38.     procedure RunTest(testResult :TTestResult); override;
  39.     procedure Setup; override;
  40.     procedure TearDown; override;
  41.   published
  42.     procedure TestStrToIntIsZero;
  43.   end;
  44.   function Suite: ITestSuite;
  45. implementation
  46. function Suite: ITestSuite;
  47. begin
  48.   Result := TestSuite('Test MyObject',
  49.                   [TTestMyObject.Suite,
  50.                    TTestMyObjectOverrideRunTest.Suite]);
  51. end;
  52. { TTestMyObject }
  53. procedure TTestMyObject.CallStrToIntIsZero;
  54. begin
  55.   FTestResult := FMyObject.StrToIntIsZero(FTestString);
  56. end;
  57. procedure TTestMyObject.CheckException(AMethod: TTestMethod;
  58.   AExceptionClass: ExceptionClass);
  59. begin
  60.   try
  61.     AMethod;
  62.     fail('Expected exception not raised'); 
  63.   except
  64.     on E: Exception do
  65.     begin
  66.       if E.ClassType <> AExceptionClass then
  67.         raise;
  68.     end
  69.   end;
  70. end;
  71. procedure TTestMyObject.Setup;
  72. begin
  73.   FMyObject := TMyObject.Create;
  74. end;
  75. procedure TTestMyObject.TearDown;
  76. begin
  77.   FMyObject.Free;
  78. end;
  79. procedure TTestMyObject.TestEMyObject;
  80. begin
  81.   CheckException(FMyObject.RandomException, EMyObject);
  82. end;
  83. procedure TTestMyObject.testMyObject;
  84. begin
  85.   try
  86.     FMyObject.DoSomething;
  87.   except
  88.     assert(false);
  89.   end;
  90. end;
  91. procedure TTestMyObject.TestStrToIntIsZero;
  92. begin
  93.   FTestString := 'blah';
  94.   CheckException(CallStrToIntIsZero, EConvertError);
  95. end;
  96. { TTestMyObjectOverrideRunTest }
  97. procedure TTestMyObjectOverrideRunTest.RunTest(testResult :TTestResult);
  98. begin
  99.   try
  100.     inherited runTest(testResult);
  101.     if FExpectedException <> nil then
  102.       fail('Excepted Exception did not occur');
  103.   except
  104.      on E: Exception do
  105.      begin
  106.        if FExpectedException = nil then
  107.          raise
  108.        else
  109.          if E.ClassType <> FExpectedException then
  110.            raise;
  111.      end;
  112.   end;
  113.   { clear the exception until the next test registers an Exception }
  114.   FExpectedException := nil;
  115. end;
  116. procedure TTestMyObjectOverrideRunTest.SetExpectedException(
  117.   Value: ExceptionClass);
  118. begin
  119.   FExpectedException := Value
  120. end;
  121. procedure TTestMyObjectOverrideRunTest.Setup;
  122. begin
  123.   FMyObject := TMyObject.Create;
  124. end;
  125. procedure TTestMyObjectOverrideRunTest.TearDown;
  126. begin
  127.   FMyObject.Free;
  128. end;
  129. procedure TTestMyObjectOverrideRunTest.TestStrToIntIsZero;
  130. begin
  131.   SetExpectedException(EConvertError);
  132.   FMyObject.StrToIntIsZero('blah');
  133. end;
  134. end.