使用 Google Test 和 CMake 在子文件夹中配置测试
Posted
技术标签:
【中文标题】使用 Google Test 和 CMake 在子文件夹中配置测试【英文标题】:Configuring Tests in subfolders using Google Test and CMake 【发布时间】:2016-01-30 04:39:36 【问题描述】:这应该是一个相当简单的问题,但考虑到使用 cmake 构建项目的黑魔法,它将帮助相当多的人解决这个问题。
我正在尝试让我的代码库更有条理。为此,我正在根据其域创建包含测试套件的子文件夹。
Google 测试本身已经在编译和运行,唯一的问题是通过这种重组,Google 测试无法找到我拥有的任何测试用例。
这是我的结构:
测试\ | \域1\ |CMakeLists.txt |domain1_test.cpp |domain1_test.hpp |[.. 更多测试...] \域2\ |CMakeLists.txt |domain2_test.cpp |domain2_test.hpp |[.. 更多测试 ...] |main.cpp |CMakeLists.txt如您所见,我有两个存放测试的文件夹。
其中的CMakeLists.txt
文件如下:
主测试目录中的CMakeLists.txt
是:
我做错了什么?
运行测试只是说没有找到测试。
谢谢!
更新 添加我的 main.cpp
其实没什么特别的,只是样板的 main.cpp 文件。
#include "gtest/gtest.h"
int main(int argc, char ** argv)
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
【问题讨论】:
有几件事要检查。您的main.cpp
中有什么内容?您是否需要它,或者您可以链接到gtest_main
而不是gtest
,从而允许 gtest 本身计算出哪些测试可以运行?您的***CMakeLists.txt
是否在某处调用了enable_testing()
?
我添加了我正在使用的 main.cpp
文件。是的,我的*** CMakeLists.txt 有 enable_testing()
调用。
【参考方案1】:
问题是你的domain*testlib
s 中没有符号被你的可执行源引用,即main.cpp
。
Google Test 中的 TEST
和 TEST_F
宏会自动向测试运行程序注册测试用例。因此,您的测试源文件实际上包含对 gtest 库中符号的引用,而不是相反。因此,链接器不会包含您的任何实际测试用例。
您应该将domain*_test.cpp
和domain*_test.hpp
文件作为可执行源的一部分,而不是使用它们创建库。您可以直接引用文件或使用在每个 CMakeLists.txt
中定义的变量和源列表。
【讨论】:
是的,这解决了问题。所以,基本上你必须引用主 CMakeLists.txt 中的所有内容。我想通过使用库,我可以通过编译我想要测试的东西来节省编译时间。 @HectorVillarreal:好吧,make
已经负责编译新的/修改过的源代码,即使您只编译了一个源文件,也必须再次进行链接。因此,您不会节省太多编译时间,实际上,如果您没有库,它(只是稍微)会更快,因为您不需要花时间创建和扩展档案。【参考方案2】:
我做错了什么?
运行测试只是说没有找到测试。
使“make test”可用并在您需要的构建目录中工作 ctest
ENABLE_TESTING()# Force "make test" to works
在 CMakeLists.txt 中的 add_test 之前
【讨论】:
问题不在于make test
不运行测试可执行文件。 OP 说他运行测试并且可执行文件报告没有找到测试。另外,他使用的不是CTest
,而是gtest
。以上是关于使用 Google Test 和 CMake 在子文件夹中配置测试的主要内容,如果未能解决你的问题,请参考以下文章