GoogleTestで関数をテストしようとしています。
すべてが正しく設定されているようで、gtestがなくても正常にビルドおよび実行されます...(コードが少し複雑なので、ここにすべてのソースファイルを一覧表示することはできませんが、gtestを追加しないと、ファイルはリンクされます適切に実行され、正常に実行されます)。
アプリケーションタイプのプロジェクトです。ライブラリの依存関係がいくつかあります...無関係です。
テストプロジェクトは、別のプロジェクトとしてソリューションに追加されます。テストされたプロジェクトが依存関係としてあります。テストプロジェクトの.hファイルはgtestのみを指します....cpp(メインではなく、標準のInitGoogleTestメインです)は、テストされたプロジェクトのヘッダーファイルである独自のヘッダーファイルを追加し、以下に示すテストがあります。 。
アプリケーションであっても、プロジェクトのビルド時に自動的に作成されるTestedProject.libがあります。TestedProject.libをライブラリ依存関係としてTestProject(リンク内)に追加しました。
Class x
{
public:
x(){} // I didn't really need this, I only added the class so I have access to
~x(){}; // non-class methods with gtest - but it still doesn't work
bool myFunction(std::string a, double b, bool c);
};
実装:
bool x::myFunction(std::string a, double b, bool c)
{
// implementation
return false;
}
somewhere_else
{
x x_instance;
y = x_instance.myFunction("a", 1, false); // works, all builds, executes, life is great
}
単体テストを追加します。
class TheTest : public ::testing::Test
{
protected:
x x_instance;
};
TEST_F(TheTest, Fail)
{
EXPECT_FALSE(x_instance.myFunction("a", 1, false));
}
ビルドしません。リンクエラー(上記のサンプルコードのように、名前を簡略化して変更しました。コンテンツを台無しにしないでください)
Error 2 error LNK2019: unresolved external symbol
"public: bool __thiscall x::myFunction(class std::basic_string<char,struct std::char_traits<char>,double,bool)"
(?myFunction@x@@QAE_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@00000NNNN_N1@Z)
referenced in function "private: virtual void __thiscall TheTest_Fail_Test::TestBody(void)"
(?TestBody@TheTest_Fail_Test@@EAEXXZ) C:\path\file.obj
私は以前にこれを行ったことがあります-リンクエラーを解決しました-Googleテストでいくつかのテストを書きました-しかし私は何も欠けているのを見ることができません。
テストとして、私は少し書いた
ヘッダーファイルのクラス宣言のinttest(){return 4;} .. ..
次に、テストをEXPECT_EQ(x.test()、4);に置き換えました。
機能した。素晴らしい。しかし、それは、テストされたすべてのコードを単一のファイル、cppなどに含めることを意味します...これは単に不合理です。このアプリケーションプロジェクトにはいくつかのファイルがあります。
この問題を解決するにはどうすればよいですか?Google Testリンクを作成し、ヘッダーと実装ファイルを含むクラスでテストするにはどうすればよいですか?そのヘッダー/実装が別のプロジェクトにある場合、「アプリケーション」タイプですか?
これまでに私が見つけた唯一の同様の問題:同じソリューションで異なるプロジェクトをクロスリンクするときのVisualStudio2008でのC++リンクの問題
解決策を見つけるのを手伝ってください。