ATL 経由でコンポーネントを公開するプロジェクトを引き継いでいます。
このセットアップでカバーする単体テストの主な領域は 2 つあります。
- 内部コンポーネントのテスト (COM 経由で公開される場合と公開されない場合があります)
- 外部に公開されたコンポーネントのテスト (別名、公開されたインターフェースのテスト)
現在、プロジェクトには、すべての内部コンポーネントの単体テストがソリューション内にあります。これらは、実行時にコンパイルして実行するプリプロセッサ フラグによって有効になります。
私が行ってきた調査から、「標準」は、単体テストを別のサブプロジェクトに配置し、単体テストが内部コンポーネントにアクセスするための主要なソリューション供給フックを持つことであるようです。このセットアップでは、単体テスト ソリューションは、テスト対象のソリューションへの依存関係を設定します。これは本当に「規範」なのか、それとも単体テスト フレームワークをテスト対象のソリューション内に配置する人がたくさんいるのでしょうか (別名、単体テストはサブ プロジェクトではなく#ifdef
、プリプロセッサ フラグが指定されていない)?
現在使用されている単体テスト フレームワークは cppunit のようで、gtest に切り替えて、すべてを別のサブ プロジェクトに移動しようと考えていましたが、長期的にはその努力が価値があることを確認したいと考えています。
私が考えた 1 つの方法は__declspec
、クラスをテストすることでした。クラスは、プリプロセッサの定義が指定されている場合にのみ公開されます。次に、別の単体テスト サブプロジェクトにより、そのプリプロセッサがメイン ソリューションにインナーを公開するように指示できるようになります。これが最善のルートかどうかはわかりません。
だから私の質問は:
- 単体テストを別の(サブ)プロジェクトに配置し、テストされるソースからコンポーネントを公開するのは標準ですか(フックを介して、クラス定義を公開するなど)?
- COM DLL から内部コンポーネントを公開する最良の方法は何ですか?
- 内部コンポーネントのテストを可能にするプリプロセッサ フラグ
__declspec
は悪い考えでしょうか? テスト対象の項目が通常の操作中に通常は公開されない単体テストで、他の誰かがこれを行ったことがありますか?
コメントありがとうございます!