Динамические параметризованные тесты с GoogleTest и CTestC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Динамические параметризованные тесты с GoogleTest и CTest

Сообщение Anonymous »

Я пытаюсь заставить CMake обнаруживать тесты при фактическом вызове, а не во время сборки, используя генератор Ninja Multi-Config. Сначала я думал, что установка DISCOVERY_MODE на PRE_TEST в gtest_discover_tests должна решить эту проблему, но, видимо, нет.
Вот минимальный воспроизводимый пример. Нам нужны следующие файлы:
  • Код: Выделить всё

    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
Запуск mytest работает напрямую (он показывает неудачный подтест ParamTestSuite/ParamTest.Test1/1), но с помощью CTest новый тест не обнаруживается и не выполнен (выполняется только один подтест). Можно ли это решить?

Подробнее здесь: https://stackoverflow.com/questions/783 ... -and-ctest
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Невозможно найти общую библиотеку в qtest при использовании VSCODE Qt5 QTest CTest CMake
    Anonymous » » в форуме C++
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Невозможно компилировать параметризованные тесты повышения с Cmake
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Невозможно компилировать параметризованные тесты повышения с Cmake
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Невозможно компилировать параметризованные тесты повышения с Cmake
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Невозможно компилировать параметризованные тесты повышения
    Anonymous » » в форуме C++
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»