私は vc++ 6.0 で書かれた大規模なコード ベースを管理する任務を負っており、コードの一部の単体テストの構築を開始する必要があります。CPPUnit をセットアップしましたが、プロジェクトの DLL で動作します。直面している問題は次のとおりです。レガシ アプリケーションは、10 個の静的ライブラリと、コードの 99% を含む 1 つの巨大な実行可能 MFC アプリケーションで構成されています。私の単体テスト フレームワークは、同じワークスペース内の別のプロジェクトで実行されており、10 個のライブラリを問題なくテストします。すべてのインクルードと参照は問題ありません。大規模な MFC アプリケーションに対して同じことをしようとすると、リンカー エラーが発生します。アプリケーションの dll。テスト コードをアプリケーション内に直接配置せずにアプリケーションを単体テストする方法はありますか。
5 に答える
そのまま続行する必要があります。
- ライブラリを参照するテストアプリケーションが1つあります。
- これらのライブラリも参照するメインアプリケーションが1つあります。
コードをメインアプリケーションから既存のライブラリに移動するか、できればコードを新しいライブラリに移動します。そうすれば、テストアプリケーションは、アプリケーションを参照しなくても、より多くのコードにアクセスできます。
main()
アプリケーションのソースが、テストアプリケーションによってテストされるライブラリ内の他のすべてを定義する1つのモジュールで構成されている場合、完了したらわかります。
メイン アプリケーションをテストするには、テストしたいソース ファイルを含むテスト プロジェクトをセットアップできます。VC6 で簡単に実現できるかどうかはわかりませんが、手元にありませんが、VS2005 以降では非常に簡単です。
したがって、ソリューションでは、次のような構造になります。
MyLegacySystem.sln
MyApplication.proj
Main.cpp
BusinessRules.cpp
MyApplicationUnitTests.proj
UnitTestsMain.cpp
BusinessRules.cpp
BusinessRulesTests.cpp
何らかの理由でソース ファイルを 2 つのプロジェクトに含めることができない場合は、プリプロセッサ マジックを呼び出して、ソースをテスト プロジェクトに取り込むことができます。
BusinessRulesStub.cpp:
#include "..\src\BusinessRules.cpp"
ただし、これは基本的に一時的な修正です。すでに示唆されているように、最終的にはほとんどのコードを別のライブラリに抽出する必要があります。
プロジェクトをリファクタリングしてビジネス ロジックを新しい静的ライブラリに移動できない場合は、テスト プロジェクトをプロジェクトの中間オブジェクト ファイルにリンクしてみてください。おそらく BigProject\debug または BigProject\debug\obj にあります。あなたが発見したように、.EXEにリンクすることはできません。
これにより、ソースコードの実際の複製を回避しながら、チャドが提案したコピープロセスと同じ結果が得られます。これは非常に悪いことです。