4

DUnitフレームワークを使用したアプリケーションの単体テストプロジェクトがあります。$IFDEFこのプロジェクトには、GUIまたはコマンドラインの代わりにxmlファイルでテスト結果を出力するためにで囲まれたユニットがあります。XML_OUTPUT定義は、ビルド構成を切り替えることで有効になります。

program DelphiCodeToDoc_Tests;

uses
  TestFramework,
  TextTestRunner,
  Sysutils,
  Forms,
  GUITestRunner,
{$IFDEF XML_OUTPUT}
  XmlTestRunner2 in 'DUnit_addon\XmlTestRunner2.pas',
{$ENDIF}
  DCTDSetupTests in 'IntegrationTests\DCTDSetupTests.pas',
  ...

これは完全に機能します。この問題は、IDEからこのプロジェクトに新しいユニットを追加するときに始まります([ファイル]>[新規]>[ユニット]の新しいユニット)。

テストプロジェクトは現在:

uses
  TestFramework,
  TextTestRunner,
  Sysutils,
  Forms,
  GUITestRunner,
  DCTDSetupTests in 'IntegrationTests\DCTDSetupTests.pas',
  ...
  MyNewUnit in 'IntegrationTests\MyNewUnit.pas';

ご覧のとおり、テストXML_OUTPUTが消えました...ユニットを追加するたびに、DelphiIDEはこのテストを削除します。

なぜそしてどうやってそれを避けることができるか知っていますか?

4

5 に答える 5

7

メイン プログラムにプロキシ ユニットを追加して、この問題のある動作を回避することができます (多くの人はこれを機能ではなくバグと見なしています)。

program DelphiCodeToDoc_Tests;

uses
  ...
  XMLTestRunnerProxy,  
  ...

unit XMLTestRunnerProxy;

interface

{$IFDEF XML_OUTPUT}
uses
  XmlTestRunner2 in 'DUnit_addon\XmlTestRunner2.pas';
{$ENDIF}

implementation

end.
于 2010-03-31T18:46:50.970 に答える
5

Usesいずれにせよ、実際に使用されるコードのみがアプリケーションにコンパイルされるため、通常、句に使用されていないユニットがあっても問題はありません。

IDE 内でプログラムを実行すると、アプリケーションにリンクされているすべてのコードを確認できます。コンパイルされたすべてのコードの横に青い点が表示されます。

1 つの注意点はinitialization、関心のあるユニットのセクションを確認する必要があることです。アプリケーションが起動するとすぐにそのセクションのコードが実行されるため、初期化セクションにあるコードはユニットを含めるだけで自動的に含まれます。必要に応じて、ユニットの初期化セクション内にコンパイラ ディレクティブを追加して、初期化コードがリンクされて実行されないようにすることができます。

于 2010-03-31T18:21:31.867 に答える
5

削除は、IDE が DPR の USES 句を変更する必要があるときにいつでも発生します。「名前を付けて保存」を使用してユニットの名前を変更しても、同じことが行われます。

これを回避するために、私は常に新しいユニットを空のテキスト ファイルとして外部で作成し、手動で DPR に追加しています。最初はもう少し手間がかかりますが、必要な場合にのみユニットを含めることになります。また、Delphi 2005 以降を使用している場合にこれが発生した場合は、編集ペインの下部にある [履歴] タブに切り替えて、[ローカル ファイル] の内容をコピーして、ユニットが起動する前のバージョンを取得できます。が追加され、他のすべてが削除されました。

はい、これはバグです。 具体的にはQC#6294であり、公開されているため、Embarcadero はこの問題を認識しています。

于 2010-03-31T18:56:09.500 に答える
5

DPR の使用リストは、IDE によって管理されます。残念ながら、これについてあなたができることは何もありません。公式には、DPR のusesリストの途中に IFDEF を配置することは想定されていません。

XmlTestRunner2 ユニットをプロジェクトに残し、ユニット自体の中に IFDEF を配置して、XML_OUTPUT が設定されていない場合は何もコンパイルしないようにします。

于 2010-03-31T18:06:07.530 に答える
0

2 つのプロジェクトがあるとします。オプションのコードを1回、なしで1回。次に、必要な方、またはその両方を作成します。プロジェクト グループを使用すると、うまく機能します。

于 2010-04-01T09:04:31.230 に答える