2012-03-28 7 views
5

ユニットテストのための古いC++アプリケーションがあります。私は私のソリューションで、(googletestを使用して)ユニットテスト実行可能ファイルを構築する2番目のプロジェクトを作成しました。テストプロジェクトは、メインプロジェクトのヘッダファイルを参照します。テストプロジェクトは、メインプロジェクトのクラスの1つを試してみるまでうまくいきます。ユニットテストの.EXEプロジェクトからのVC++ .EXEプロジェクトからのクラスの参照

#include "stdafx.h" 

#include "JsContext.h" 
#include "gtest/gtest.h" 

TEST(JsContextTests, CreateJsContext) { 
    JsContext context; // linking fails as soon as this line is added 
} 

私は反対テストプロジェクトをリンクすべきかわからないんですので、メインの実行ファイルが.LIBファイルを生成しません

Error 1 error LNK2001: unresolved external symbol "public: __thiscall JsContext::JsContext(void)" ([email protected]@[email protected]) JsContextTests.obj tests 
Error 2 fatal error LNK1120: 1 unresolved externals D:\Projects\Js-Clean\src\Debug\tests.exe tests 

..生成します。

別のEXEプロジェクトのクラスをテストするための最良の方法は何ですか?

答えて

6

メインプロジェクトでライブラリが作成されない場合は、JsContext.cppから生成された.objファイルまたはJsContext.hのソースを持つファイルにリンクする必要があります。しかし、実行可能ファイルではなく、静的ライブラリを構築するためにメインプロジェクトを変更するのは簡単です。これは、プロジェクトプロパティの設定 - >一般 - >設定タイプで行うことができます。

静的ライブラリを構築することができない場合は、おそらくテストプロジェクトのソースファイルを再コンパイルすることをお勧めします。あなたは 'Main Project Dependencies'フィルタを追加して、あなたがテストしているものに必要なソースファイルのみを含めることができます。

最後の手段として、プリリンクイベントを使用して、関連する.objファイルをメインプロジェクトの出力ディレクトリからテストプロジェクトの出力ディレクトリにコピーできますが、私は提案しませんこの。

関連する問題