6

維持および開発するための厄介なDelphi7レガシーシステムがあります。私はすでに「レガシーコードを効果的に使用する」を読んでいて、この本がとても好きです。

本のアドバイスに従うことを始めるために、私はテストプロジェクトを作成し、単一のテストを書いてみました。これを行うには、テストプロジェクトにユニットを追加する必要がありますが、ここに問題があります。テスト対象のシステムには、恐ろしい使用依存関係があります。あるユニットは他のユニットを使用し、他のユニットは他のユニットを使用します。ほとんどのユニットは、直接的または間接的に1つの特定のユニットを使用しているようであり、このユニットには、uses句に170の依存関係があります。間接的な循環依存関係もあります。

現在、レガシーシステムのすべてのユニットをテストプロジェクトに追加しようとしていますが、「ユニットxxxが異なるバージョンのxxxでコンパイルされた」などのあらゆる種類の問題が発生しています。

だから私は何か間違ったことをしているのだろうか。私は以前に単体テストを使用しましたが、私自身のプロジェクトでは、より小さく、より優れた構造とモジュール化を備えていました。この状況で私が持っているオプションは何ですか?私は何かが足りないのですか?

4

1 に答える 1

5

コードには常に依存関係があります。コードを再利用できる限り、依存関係があります。レガシー システムをテストしているので、大規模な再構築は問題外です。

したがって、依存関係を受け入れるだけで済みます。最も便利で実用的なアプローチは、単一の単体テスト プロジェクトを作成することです。そのプロジェクトには、すべての単体テストが含まれています。ランナー プログラムの機能を使用して、一度に特定のテストのみを実行します。

これにより、プロジェクトの .dpr ファイルにメイン プロジェクトと同じユニット リストが含まれることになります。それがあなたが現在試したことであり、正しいアプローチです。

あなたの問題は、メイン プロジェクトとユニット テスト プロジェクトの間で DCU ディレクトリ (ユニット出力ディレクトリ) を共有しているように聞こえます。また、2 つのプロジェクトには異なるコンパイラ オプションがあります。これが、報告されたエラーの最も可能性の高い説明です。

明らかな解決策がいくつかあります。

  1. 両方のプロジェクトのコンパイラ オプションを調整します。その後、DCU を共有できます。
  2. 2 つのプロジェクト用に個別の DCU ディレクトリを用意します。

オプション 2 ははるかに堅牢であり、ベスト プラクティスです。ただし、コンパイラ オプションが異なる理由を理解しようとする必要があります。テスト対象のユニットが必要に応じてコンパイルおよび機能するように、新しいユニット テスト プロジェクトのコンパイラ オプションを変更する必要がある可能性は十分にあります。現代の Delphi では、コンパイラ オプションの一貫性を確保するためにオプション セットを使用します。

さて、あなたが直面している他の技術的な問題があるかもしれません。また、少し推測する必要があるため、私のエラーの説明は正しくないかもしれません。しかし、肝心なのは、.dpr ファイルに同じユニットのリストを用意するのが正しいということです。

于 2012-08-21T12:17:37.180 に答える