GoogleTest CMake 无法识别 TEST_F:就像它无法识别 GTest 一样
GoogleTest CMake doesn't recognize TEST_F: Like it's not recognizing GTest something
好吧,我承认,这是个特例。当我们构建我们的应用程序时,我们正在使用 make,所以我将我的测试包含在 src 下的测试文件夹中。然后在与我们的发布文件夹相同的级别,我们创建了一个单元测试文件夹,其中包含我们所有的源文件和我们的测试源文件。
但是我的IDE是CLion,它使用CMake。在我的 CMakeLists.txt 文件中,我包含了:
enable_testing()
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
add_executable(TestProject ${SOURCE_FILES})
target_link_libraries(TestProject ${GTEST_BOTH_LIBRARIES})
我正在创建我的第一个测试夹具。这是代码:
#include "OPProperties.h"
#include "gtest/gtest.h"
namespace {
// The fixture for testing class OPPropertiesTestTest.
class OPPropertiesTestTest : public ::testing::Test {
protected:
// You can remove any or all of the following functions if its body
// is empty.
OPPropertiesTestTest() {
// You can do set-up work for each test here.
}
virtual ~OPPropertiesTestTest() {
// You can do clean-up work that doesn't throw exceptions here.
}
// If the constructor and destructor are not enough for setting up
// and cleaning up each test, you can define the following methods:
virtual void SetUp() {
// Code here will be called immediately after the constructor (right
// before each test).
}
virtual void TearDown() {
// Code here will be called immediately after each test (right
// before the destructor).
}
// Objects declared here can be used by all tests in the test case for OPPropertiesTestTest.
};
TEST_F(OPPropertiesTestTest, ThisTestWillFail) {
EXPECT_EQ(0, 2);
}
} // namespace
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
这是一张图片截图:
请注意我的 TEST_F 函数中的语法检查器错误。当我开始键入 TEST_F 时,代码补全正在尝试查找提升测试函数。
谁能告诉我我还需要添加什么到 CMakeLists.txt 文件中,或者我没有做哪些 GTest 函数没有被识别?
正如 πìντα ῥεῖ 指出的那样,我实际上并没有尝试构建代码。当我这样做时,我第一次收到 pthread 的链接器错误,所以我们在 CMakeLists.txt 文件中添加了以下行:
target_link_libraries(OnePrint pthread)
然后我再次尝试构建并收到这些错误:
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_key_create'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_getspecific'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_key_delete'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_setspecific'
collect2: error: ld returned 1 exit status
所以,我 运行 搜索了这些错误并找到了 this question。
对我有用的答案是 here。
好吧,我承认,这是个特例。当我们构建我们的应用程序时,我们正在使用 make,所以我将我的测试包含在 src 下的测试文件夹中。然后在与我们的发布文件夹相同的级别,我们创建了一个单元测试文件夹,其中包含我们所有的源文件和我们的测试源文件。
但是我的IDE是CLion,它使用CMake。在我的 CMakeLists.txt 文件中,我包含了:
enable_testing()
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
add_executable(TestProject ${SOURCE_FILES})
target_link_libraries(TestProject ${GTEST_BOTH_LIBRARIES})
我正在创建我的第一个测试夹具。这是代码:
#include "OPProperties.h"
#include "gtest/gtest.h"
namespace {
// The fixture for testing class OPPropertiesTestTest.
class OPPropertiesTestTest : public ::testing::Test {
protected:
// You can remove any or all of the following functions if its body
// is empty.
OPPropertiesTestTest() {
// You can do set-up work for each test here.
}
virtual ~OPPropertiesTestTest() {
// You can do clean-up work that doesn't throw exceptions here.
}
// If the constructor and destructor are not enough for setting up
// and cleaning up each test, you can define the following methods:
virtual void SetUp() {
// Code here will be called immediately after the constructor (right
// before each test).
}
virtual void TearDown() {
// Code here will be called immediately after each test (right
// before the destructor).
}
// Objects declared here can be used by all tests in the test case for OPPropertiesTestTest.
};
TEST_F(OPPropertiesTestTest, ThisTestWillFail) {
EXPECT_EQ(0, 2);
}
} // namespace
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
这是一张图片截图:
请注意我的 TEST_F 函数中的语法检查器错误。当我开始键入 TEST_F 时,代码补全正在尝试查找提升测试函数。
谁能告诉我我还需要添加什么到 CMakeLists.txt 文件中,或者我没有做哪些 GTest 函数没有被识别?
正如 πìντα ῥεῖ 指出的那样,我实际上并没有尝试构建代码。当我这样做时,我第一次收到 pthread 的链接器错误,所以我们在 CMakeLists.txt 文件中添加了以下行:
target_link_libraries(OnePrint pthread)
然后我再次尝试构建并收到这些错误:
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_key_create'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_getspecific'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_key_delete'
/home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_setspecific'
collect2: error: ld returned 1 exit status
所以,我 运行 搜索了这些错误并找到了 this question。
对我有用的答案是 here。