60

ここにいる少数のDelphiユーザーがユニットテストをどのように行っているのか疑問に思っていますか?あなたが見つけたIDEと統合するものがうまく機能するものはありますか?そうでない場合は、どのツールを使用していますか。また、すべてがどのように機能するかを示すミニプロジェクトの例を知っていますか。

アップデート:

私はBDS2006Proを使用していることを忘れましたが、時々Delphi 7にアクセスし、もちろん他の人が他のバージョンを使用している可能性があります。

4

9 に答える 9

40

DUnitは、win32Delphiで使用されるxUnitタイプのユニットテストフレームワークです。Delphi 2005以降、DUnitはIDEの証明書ポイントに統合されています。Delphi IDE用の他のDUnit統合ツールは、ここにあります。DUnitには、例を含むドキュメントが付属しています。

于 2008-08-20T18:26:09.400 に答える
19

DUnitにはいくつかのアドオンがありますが、これはSOの新しいエントリの価値があるかもしれません。私が今リストに載せることができる2つは

  1. FastMM4統合:ユニットテストはメモリリーク(およびその他のもの)を自動的に検出し、DUnit9.3以降で動作します
  2. OpenCTFは、DUnitに基づく「コンポーネントテストフレームワーク」であり、プロジェクトのフォーム、フレーム、およびデータモジュール内のすべてのコンポーネントに対して動的にテストを作成し、カスタマイズされたルール(オープンソース)を使用してそれらをテストします。
于 2009-03-26T21:22:10.067 に答える
9

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 ファイルが作成され、必要なすべてのシンボル情報が含まれます。.exe を含む .mab ファイルをクライアントに送信したり、そのコンテンツを .exe に埋め込むこともできます。この .mab ファイルは最適化されています。927,984 バイトの .map は、71,943 の .mab ファイルに圧縮されます。

したがって、このユニットは、純粋なオープンソースでは、DUnit と MadExcept の結婚式の自然な子として認識できます。:)

追加情報は、フォーラムで入手できます。遠慮なく尋ねてください。フィードバックと機能リクエストは大歓迎です! Delphi 6 から XE まで動作します。

于 2011-04-13T18:33:39.257 に答える
9

DUnit2 はhttp://members.optusnet.com.au/~mcnabp/から入手できます。

DUnit2 は元の dunit よりも定期的に変更されます。Delphi 2009 でも動作します。

試してみてください: http://sourceforge.net/projects/dunit2/ - 元の作者である Peter McNab が数年前に亡くなったため、移動しました。dunit メーリング リストではまだいくつかの活動が行われています。

于 2008-09-19T03:52:13.853 に答える
9

開発中の最新の Delphi バージョン用の新しいユニット テスト フレームワークがあります: https://github.com/VSoftTechnologies/DUnitX

于 2013-10-22T09:05:54.087 に答える
3

通常、ユニット テスト プロジェクトを作成します ([ファイル] -> [新規] -> [その他] -> [ユニット テスト] -> [テスト プロジェクト])。必要なものは揃っているので、今のところ十分です。

私は Delphi 2007 を使用しているので、これが 2006 年に利用可能かどうかはよくわかりません。

于 2008-08-24T12:53:25.797 に答える
2

DUnit を使用してすべてのロジック コードの単体テストを行い、AQTimeに含まれるコード カバレッジ プロファイラーを使用して、コードのすべてのパスがテストによって実行されることを確認します。

于 2008-09-15T15:11:28.233 に答える
1

Delphi 5でDUnitを使用しようとしましたが、うまく機能しませんでした。特に、COMインターフェイスを実装している場合は、すべてのテストインフラストラクチャをセットアップするための多くの依存関係が見つかりました。新しいバージョンでテストサポートが改善されたかどうかはわかりません。

于 2008-08-20T18:44:29.870 に答える