『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:
沒有留言:
張貼留言