首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用新命令gtest_discover_tests在CMake/Ctest中使用google

使用新命令gtest_discover_tests在CMake/Ctest中使用google
EN

Stack Overflow用户
提问于 2018-06-14 16:00:44
回答 1查看 11.4K关注 0票数 15

我试图在CMake/Ctest中使用googletest。我有几个测试源文件(每个源文件包含许多TEST/TEST_F/.命令),它们位于多个目录中。我希望与给定源相关的测试在与其源文件相同的目录中执行。另外,我更喜欢测试源文件的构建过程本身就是一个测试。所以我做了这样的东西:

代码语言:javascript
复制
file(GLOB_RECURSE test_srcs
     RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
     "tests/*.cpp")
foreach(test_src ${test_srcs}) 
  get_filename_component(test_dir ${test_src} DIRECTORY)
  get_filename_component(test_exe ${test_src} )NAME_WE)
  add_executable(${test_exe} EXCLUDE_FROM_ALL tests/gtest_main.cpp ${test_src})
  set_target_properties(${test_exe}                                       
    PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${test_dir}                                     
    )
  target_link_libraries(${test_exe} gtest)
  add_test(NAME build_${test_exe} COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target ${test_exe})
  set_tests_properties(build_${test_exe} PROPERTIES FIXTURES_SETUP ${test_exe})
  gtest_discover_tests(${test_exe}
    TEST_LIST list
    WORKING_DIRECTORY ${test_dir}
    PROPERTIES DEPENDS build_${test_exe}
    PROPERTIES FIXTURES_REQUIRED ${test_exe}
    )
endforeach()

但是,我试图在测试之间声明的依赖关系似乎没有被考虑在内:测试的构建并不一定发生在执行底层测试之前.

如果我像下面这样使用旧的gtest_add_tests而不是gtest_discover_tests,它可以工作:

代码语言:javascript
复制
gtest_add_tests(
  TARGET ${test_exe}
  SOURCES ${test_src}
  WORKING_DIRECTORY ${test_dir}
  TEST_LIST tlist
  )
set_tests_properties(${tlist} PROPERTIES FIXTURES_REQUIRED ${test_exe})

我是不是错过了gtest_discover_tests的什么

EN

回答 1

Stack Overflow用户

发布于 2019-11-26 22:26:05

在开始赏金之后,我自己重新开始了这项研究。我发现,最简单的方法是在系统范围内安装googletest

所以,首先安装软件包。在Ubuntu18.04上,那是supt apt install googletest

出于某种原因,我不得不构建这个库(也许没有必要?):

代码语言:javascript
复制
cd /usr/src/googletest
mkdir bin && cd bin
cmake ..
make && make install

之后,我已经能够编译和运行一个测试用例。我的CMakeLists.txt测试部分如下所示:

代码语言:javascript
复制
enable_testing()
find_package(GTest REQUIRED)
include(GoogleTest)

add_executable(tests tests/foo_test.cpp tests/bar_test.cpp)
target_link_libraries(tests GTest::GTest GTest::Main)
gtest_discover_tests(tests)

在我的项目中,最小的测试用例文件如下所示:

代码语言:javascript
复制
// tests/foo_test.cpp

#include "gtest/gtest.h"

TEST(Foo, Sum)
{
  EXPECT_EQ(2, 1 + 1);
}

编译就像:

代码语言:javascript
复制
mkdir bin && cd bin
cmake ..
./tests
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50861636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档