Вот минимальный воспроизводимый пример. Нам нужны следующие файлы:
Код: Выделить всё
CMakeLists.txtКод: Выделить всё
cmake_minimum_required(VERSION 3.24) project(dynamic_gtests CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) include(FetchContent) FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/5a37b517ad4ab6738556f0284c256cae1466c5b4.zip ) # For Windows: Prevent overriding the parent project's compiler/linker settings set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) FetchContent_MakeAvailable(googletest) enable_testing() add_executable(mytest test.cpp) target_link_libraries(mytest PRIVATE GTest::gtest_main) include(GoogleTest) gtest_discover_tests(mytest WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DISCOVERY_MODE PRE_TEST)Код: Выделить всё
test.cppКод: Выделить всё
#include #include #include #include #include #include using Param = std::filesystem::path; class ParamTest : public ::testing::TestWithParam { }; TEST_P(ParamTest, Test1) { std::ifstream file(GetParam()); int value; file >> value; EXPECT_EQ(value, 42); } static std::vector discover_files() { std::vector params; std::copy(std::filesystem::directory_iterator("data"), std::filesystem::directory_iterator(), std::back_inserter(params)); return params; } INSTANTIATE_TEST_SUITE_P(ParamTestSuite, ParamTest, ::testing::ValuesIn(discover_files()));Код: Выделить всё
CMakePresets.jsonКод: Выделить всё
{ "version": 3, "configurePresets": [ { "name": "default", "generator": "Ninja Multi-Config", "binaryDir": "${sourceDir}/build" } ], "buildPresets": [ { "name": "default", "configurePreset": "default", "configuration": "Debug" } ], "testPresets": [ { "name": "default", "configurePreset": "default", "configuration": "Debug" } ] }
Код: Выделить всё
mkdir data
echo 42 > data/answer.txt
cmake --preset default
cmake --build --preset default
ctest --preset default
Код: Выделить всё
echo 43 > data/incorrect.txt
./build/Debug/mytest
cmake --build --preset default
ctest --preset default
Подробнее здесь: https://stackoverflow.com/questions/783 ... -and-ctest