2017/07/05

簡單的重試機制及 DUnit 應用,使用 Delphi XE



Simple retry mechanism in Delphi』裡寫出很簡單的重試機制。

運氣還不錯,老版本也可以使用。

比較有趣的地方是,在Daniele Spinetti 所提交的 Github,有為這個單元製作一個 DUnit Test 專案。


DUnit 最早是由Juanco Añez 設計成 Delphi 的版本,從2007 開始,便由 Embarcadero 接手維護並隨 Delphi 發佈,新版的 DUnit 使用上非常簡潔:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  [TestFixture]
  TRetryHelperTest = class(TObject)
  public
    // Sample Methods
    // Simple single Test
    [Test]
    procedure SimpleRetryTest;
  end;
 
procedure TRetryHelperTest.SimpleRetryTest;
var
  LProc: TProc;
  LCount: Integer;
  LRetry: Integer;
begin
  LCount := 0;
  LRetry := 3;
  LProc := procedure
    begin
      Inc(LCount);
      if LCount < LRetry then
        raise Exception.Create('Error Message');
    end;
  TRetryHelper.DoRetry(LRetry, 0, LProc);
  Assert.AreEqual(LRetry, LCount);
end;
 
// 舊版本雖然不是那麼輕鬆,但透過自動產生的方式,也可以得到以下的測試程式碼:
procedure TestTRetryHelper.TestDoRetry;
var
  AProc: TProc;
  ADelayInMillis: Int64;
  ARetry: Integer;
 
  LCount: Integer;
begin
  ADelayInMillis := 0;
  LCount := 0;
  ARetry := 3;
  AProc := procedure
    begin
      Inc(LCount);
      if LCount < ARetry then
        raise Exception.Create('Error Message');
    end;
  // TODO: Setup method call parameters
  FRetryHelper.DoRetry(ARetry,ADelayInMillis,AProc);
  // TODO: Validate method results
  Assert.AreEqual(ARetry, LCount);
end;

測試畫面



後記:
其實我對機械式測試是抱著懷疑的看法,因為開發者是自己,測試者也是自己,測試的方式也會按照當初所設想的方向設計,這樣測得出當時開發設想不到的 Bug 嗎?


See also:

沒有留言:

張貼留言