gpt4 book ai didi

cmake - 使用带有新命令 gtest_discover_tests 的 CMake/Ctest 的谷歌测试

转载 作者:行者123 更新时间:2023-12-03 15:09:02 25 4
gpt4 key购买 nike

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

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 , 有用:
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 上遗漏了什么吗? ?

最佳答案

在开始赏金之后,我重新开始了自己的研究。我发现,最简单的方法是使用 googletest全系统安装。

所以,首先安装这个包。在 Ubuntu 18.04 上,这是 supt apt install googletest .

出于某种原因,我不得不建立图书馆(也许不知何故没有必要?):

cd /usr/src/googletest
mkdir bin && cd bin
cmake ..
make && make install

之后,我已经能够编译和运行测试用例。我的 CMakeLists.txt测试部分如下所示:
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)

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

#include "gtest/gtest.h"

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

编译很简单:
mkdir bin && cd bin
cmake ..
./tests

关于cmake - 使用带有新命令 gtest_discover_tests 的 CMake/Ctest 的谷歌测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50861636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com