Delphi での単体テスト - どのように行っていますか?[閉まっている]
-
09-06-2019 - |
質問
ここに数人の Delphi ユーザーがいる場合、単体テストをどのように行っているのか気になります。IDE と統合されてうまく機能するものはありますか?そうでない場合は、どのようなツールを使用していますか?また、それがどのように機能するかを示すミニプロジェクトの例を持っているか、知っていますか?
アップデート:
言い忘れましたが、私は BDS 2006 Pro を使用していますが、時々 Delphi 7 を使用することもあります。もちろん、他のバージョンを使用している人もいるかもしれません。
解決
DUnit win32 Delphi で使用される xUnit タイプの単体テスト フレームワークです。Delphi 2005 以降、DUnit はある時点で IDE に統合されました。Delphi IDE 用の他の DUnit 統合ツールが見つかります。 ここ. 。DUnitが付属しています 例を含むドキュメント.
他のヒント
私たちので利用可能なユニットテストクラスを見てください。 SynCommons オープンソース ユニット. 。これは、すべての回帰テストのオープンソース フレームワークで使用されます。おそらく最高ではありませんが、検討してみる価値はあります。
見る http://blog.synopse.info/post/2010/07/23/Unit-Testing-light-in-Delphi
単体テストを実装するには、次のようなクラスを作成して新しいテスト ケースを宣言するだけです。
type
TTestNumbersAdding = class(TSynTestCase)
published
procedure TestIntegerAdd;
procedure TestDoubleAdd;
end;
procedure TTestNumbersAdding.TestDoubleAdd;
var A,B: double;
i: integer;
begin
for i := 1 to 1000 do
begin
A := Random;
B := Random;
CheckSame(A+B,Adding(A,B));
end;
end;
次に、テスト スーツを作成して実行します。
次回の 1.13 バージョンには、MadExcept と同様に、.map ファイルのコンテンツをソースとして使用して、発生した例外などのスタック トレースを記録する新しいログ メカニズムもあります。
現在は単体テスト クラスで使用されているため、失敗するとソース行とスタック トレースを含むエントリがログに作成されます。
C:\Dev\lib\SQLite3\exe\TestSQL3.exe 0.0.0.0 (2011-04-13)
Host=Laptop User=MyName CPU=2*0-15-1027 OS=2.3=5.1.2600 Wow64=0 Freq=3579545
TSynLogTest 1.13 2011-04-13 05:40:25
20110413 05402559 fail TTestLowLevelCommon(00B31D70) Low level common: TDynArray "" stack trace 0002FE0B SynCommons.TDynArray.Init (15148) 00036736 SynCommons.Test64K (18206) 0003682F SynCommons.TTestLowLevelCommon._TDynArray (18214) 000E9C94 TestSQL3 (163)
ログなしのテスト スーツとログありのテスト スーツの違いは次のとおりです。
procedure TSynTestsLogged.Failed(const msg: string; aTest: TSynTestCase);
begin
inherited;
with TestCase[fCurrentMethod] do
fLogFile.Log(sllFail,'%: % "%"',
[Ident,TestName[fCurrentMethodIndex],msg],aTest);
end;
ロギング メカニズムは、単にテストを記録するだけではありません。メソッドの再帰呼び出しをログに記録したり、ログに表示する情報を選択したり、顧客側からアプリケーションをプロファイリングしたり、公開されたプロパティ、TList または TCollection コンテンツを JSON としてログ コンテンツに書き込んだりすることができます。
.map ファイルが初めて読み取られるとき、.mab ファイルが作成され、このファイルには必要なすべてのシンボル情報が含まれます。.mab ファイルを .exe とともにクライアントに送信したり、そのコンテンツを .exe に埋め込んだりすることもできます。この .mab ファイルは最適化されています。927,984 バイトの .map は、71,943 の .mab ファイルに圧縮されます。
したがって、このユニットは、純粋なオープンソースでは、DUnit と MadExcept の結婚式から生まれた子として認識される可能性があります。:)
追加情報は、 私たちのフォーラムで入手可能. 。お気軽にお尋ねください。フィードバックや機能リクエストは大歓迎です。Delphi 6 から XE まで動作します。
DUnit2 は次から入手できます。 http://members.optusnet.com.au/~mcnabp/
DUnit2 は、元の dunit よりも定期的に変更されます。Delphi 2009でも動作します。
試す: http://sourceforge.net/projects/dunit2/ - 原作者のピーター・マクナブが数年前に亡くなったため、移転しました。dunit メーリング リストではまだ活動が続いています。
最新の Delphi バージョン用の新しい単体テスト フレームワークが開発中です。 https://github.com/VSoftTechnologies/DUnitX
通常、単体テスト プロジェクトを作成します ([ファイル] -> [新規] -> [その他] -> [単体テスト] -> [テスト プロジェクト])。必要なものは入っているので今のところ十分です。
私は delphi 2007 を使用しているので、これが 2006 で利用できるかどうかはわかりません。
DUnit を使用してすべてのロジック コードの単体テストを行い、DUnit に含まれるコード カバレッジ プロファイラーを使用します。 アクアタイム コード内のすべてのパスがテストによって実行されることを確認します。
私たちには 2 つのアプローチがあります。まず、開発者に購入して Dunit テストを実行させます。これにより、変更されたばかりのコードが以前と同様に動作するかどうかが確認されます。もう 1 つのアプローチは、CruiseControl.NET を使用して実行可能ファイルをビルドし、変更が行われるたびにダニット テストを実行して、変更による意図しない結果がないことを確認することです。
私たちのコードベースの大部分にはテストがありません。そのため、自動テストは、アプリケーションが想定どおりに動作することを確認するための継続的な開発のケースです。
Delphi 5 で DUnit を使用しようとしましたが、うまく動作しませんでした。特に COM インターフェイスを実装している場合、すべてのテスト インフラストラクチャをセットアップするための多くの依存関係が見つかりました。新しいバージョンでテストのサポートが改善されたかどうかはわかりません。