这应该是一个相当简单的问题,但考虑到使用cmake构建项目的黑色艺术,它将帮助相当多的人努力解决这个问题。
我试图让我的代码库更有条理。为此,我创建了根据其域包含测试套件的子文件夹。
Google测试本身已经在编译和运行,唯一的问题是,通过此次重组,Google Test无法找到我所拥有的任何测试用例。
这是我的结构:
tests\ | \domain1\ |CMakeLists.txt |domain1_test.cpp |domain1_test.hpp |[.. more tests ...] \domain2\ |CMakeLists.txt |domain2_test.cpp |domain2_test.hpp |[.. more tests ...] |main.cpp |CMakeLists.txt
如您所见,我有两个文件夹,其中包含测试。
这些文件中的CMakeLists.txt
文件如下:
SET(DOMAIN1_TEST_SRC domain1_test.cpp domain1_test.hpp) ADD_LIBRARY(domain1testlib STATIC ${DOMAIN1_TEST_SRC}) TARGET_LINK_LIBRARIES(domain1testlib ${Boost_LIBRARIES} domain_lib gtest ) TARGET_INCLUDE_DIRECTORIES(domain1testlib INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
主测试目录中的CMakeLists.txt
是:
add_subdirectory(domain1) add_subdirectory(domain2) ADD_EXECUTABLE(my_domain_tests main.cpp) TARGET_LINK_LIBRARIES(my_domain_tests ${Boost_LIBRARIES} domain1testlib domain2testlib comptestlib gtest ) add_test(MyTestSuite my_domain_tests)
我做错了什么?
运行测试只是说没有找到测试。
谢谢!
更新 添加我的main.cpp
它真的没什么特别,只是样板main.cpp文件。
#include "gtest/gtest.h"
int main(int argc, char ** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
答案 0 :(得分:1)
问题是,您的domain*testlib
中没有符号来自您的可执行文件来源,即main.cpp
。
Google Test中的TEST
和TEST_F
宏会自动向测试运行者注册测试用例。因此,您的测试源文件实际上包含对gtest库中符号的引用,而不是相反。因此,链接器不会包含任何实际的测试用例。
您应该将domain*_test.cpp
和domain*_test.hpp
文件包含在可执行文件源中,而不是使用它们创建库。您可以直接引用文件或使用每个CMakeLists.txt
中定义的变量和源列表来执行此操作。
答案 1 :(得分:-1)
我做错了什么?
运行测试只是说没有找到测试。
提供"进行测试"并在build dir中工作ctest,你需要
ENABLE_TESTING()# Force "make test" to works
在CMakeLists.txt中的add_test之前