25

GoogleTest を使用して単純な関数をテストしようとしていmakeますが、ビルド フォルダーで実行すると、コンパイラからUndefined Referenceエラー メッセージが表示されます。gtest ヘッダー ファイルを参照したので、何が問題なのかわかりません。何か案は?私は unix と単体テストの両方の主題全体に慣れていないので、単純なものが欠けている可能性が非常に高いです。前もって感謝します!

エラー メッセージ:

CMakeFiles/Proj2.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x1e): undefined reference to `testing::InitGoogleTest(int*, char**)'
main.cpp:(.text+0x23): undefined reference to `testing::UnitTest::GetInstance()'
main.cpp:(.text+0x2b): undefined reference to `testing::UnitTest::Run()'
collect2: error: ld returned 1 exit status

main.cpp

#include "gtest/gtest.h"

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

テスト.cpp

#include "gtest/gtest.h"
#include "Testable.h"

TEST(GetTwoTest, Two) {
    EXPECT_EQ(2, GetTwo());
}

テスト可能.cpp

#include "Testable.h"

int GetTwo() {
    return 3;
}

ここに私の CMakeLists.txt ファイルがあります:

cmake_minimum_required(VERSION 2.6)

SET(CMAKE_CXX_FLAGS "-std=gnu++11") #Turn on C++11 Support

set(FILES_TO_TEST Testable.cpp)
set(UNIT_TESTS Test.cpp)
set(MAIN_FILE main.cpp)

add_subdirectory(gtest) #Build all the gtest stuff
include_directories(gtest/include)
include_directories(.)
add_library(codeToTest ${FILES_TO_TEST})

add_executable(Proj2 ${MAIN_FILE})
target_link_libraries(Proj2 codeToTest)

add_executable(unit-test ${UNIT_TESTS})
target_link_libraries(unit-test gtest gtest_main rt pthread codeToTest)
4

3 に答える 3

12

あなたのセットアップはほぼ正しいようです。mainただし、2 つの別個の機能が必要です。1 つは実際の実行可能ファイル用で、Proj2もう 1 つはテスト実行可能ファイル用の gtest のインクルードと機能を備えていますunit-test

これは、main.cpp と test_main.cpp などの 2 つの異なる main.cpp ファイルを用意することで実行できます。あなたが示したものはtest_main.cppであり、add_executable(unit-test ...コマンドに含まれます。

新しい main.cpp には、インクルードも関数も、gtest への参照がありません。

于 2012-09-30T09:38:17.297 に答える
4

リンカ エラーから、gtest ライブラリをテスト プログラムにリンクしていないことは明らかです。

プライマーを参照してください。

Google Test を使用してテスト プログラムを作成するには、Google Test をライブラリにコンパイルし、テストをリンクする必要があります。...

コンパイラとシステムの詳細については、このドキュメントを参照してください。

于 2012-09-30T00:54:04.223 に答える
0

libgtest.aオブジェクトファイルの後に入れます

CMake ではなく手動で行う場合は、次のことを確認してください。

g++ main.cpp googletest/build/lib/libgtest.a

それ以外の:

g++ googletest/build/lib/libgtest.a main.cpp

これは私がテストした完全な動作例です: https://askubuntu.com/questions/97626/how-to-install-googletest/1295185#1295185

この問題は GoogleTest に限ったものではありません。このような最小限のライブラリの例でも再現できます。Eliは私が今すぐ習得する忍耐力がない順序付け規則について説明しています。

于 2020-11-25T14:39:09.360 に答える