4

GoogleTestFrameworkを使用していくつかの単体テストを設定しています。私のソリューションには3つのプロジェクトがあります。

  • FN(私のプロジェクト)
  • FN_test(私のテスト)
  • gtest(Google Test Framework)

FN_testを参照(依存関係)としてFNとgtestを設定し、テストを設定する準備ができたと思います(すでに全員を/ MTdに設定しています(これを行わないと、以前はリンクエラーが発生していました)) 。

特に、FN_testを使用してテストしたいFNでEmbarkというクラスを定義します。ここまでは順調ですね。したがって、googletestを使用してEmbarkTestというクラスを記述し、メンバーEmbark *を宣言して、コンストラクター内に記述します。

EmbarkTest() {
  e = new Embark(900,2010);
}

次に、F7を押すと、次のようになります。

1>FN_test.obj : error LNK2019: unresolved external symbol "public: __thiscall Embark::Embark(int,int)" (??0Embark@@QAE@HH@Z) referenced in function "protected: __thiscall EmbarkTest::EmbarkTest(void)" (??0EmbarkTest@@IAE@XZ) 1>D:\Users\lg\Product\code\FN\Debug\FN_test.exe : fatal error LNK1120: 1 unresolved externals

誰かが私が間違ったことをしたこと、および/またはこれを解決するために何ができるかを知っていますか?

編集:Embark.hからの関連コード

class Embark
{
public:

   //Constructor for initial state
   Embark(int _id, int _year);
   //Destructor
   ~Embark();   
/* ... */
}
4

3 に答える 3

3

答えはかなり単純なものだと思いました。2日間の激しいヘッドノッキングの後、次のようになります。

メインプロジェクトをコンパイルする必要があります.lib.exe

これを行った後、すべてのリンクは至福として行きました。FN_testからFNへの依存関係を宣言したので、VisualStudioがこれを自動的に行うと思いました。VisualStudioがライブラリを作成すると想定しました。そうではありませんでした。


RANT (この後読む必要はありません)
実行可能ファイルを作成するプロジェクトを同じことを実行する別のプロジェクトにリンクすることはかなりまれなので、この種の問題に関する参照を見つけるのはやや困難でした。グーグル検索は私に有用な結果を提示しませんでした。MSDNフォーラムも役に立ちませんでした。

しかし、アプリケーションで単体テストを行う場合、同じソリューションでテストプロジェクトとアプリケーションプロジェクトなど、これが発生するのは一般的ですか?私はC++の他のテストフレームワークについての知識がありません。私は次の目的でGoogleTestFrameworkを選択しました。

  1. Googleでは信頼しています
  2. 素晴らしいドキュメント
  3. 使い方と理解がとても簡単

ただし、統合にはあまりメリットがありません。他のツールは、IDEの応答性を含めてVisualStudioにはるかにうまく統合できると思います。しかし、私はその後よりも今苦しむことを好みました。私はそれが好きだったので、このツールが改善し続けることを願っています。

于 2010-03-25T12:55:15.430 に答える
1

Embarkリンカはコンストラクタの定義を見つけることができません。

  • そのコンストラクターをどこかで定義しましたか?
  • テストプロジェクトは実際にFNライブラリにリンクしていますか?
于 2010-03-24T12:39:12.253 に答える
1

リンカーが見つかりませんEmbark::Embark(int, int)

これがMSDNがエラーLNK2019について言っていることです。

于 2010-03-24T12:41:01.453 に答える