Исправления в файле CMakeList.txt для тестирования Google? - PullRequest
0 голосов
/ 16 февраля 2020

Я искал примеры CMake, чтобы помочь мне построить свой проект с его тестовой папкой. Основная проблема заключается в том, что мне нужно включить все файлы test / . cpp* в папке с тестами в tests / main. cpp для запуска тестов. Я думаю, что я должен включить мои тесты с вызовом add_test в мой test / CMakeLists.txt . Ниже мой текущий файл CMakeLists:

enable_testing ()

find_package (GTest REQUIRED)

add_executable (test main. cpp)

target_include_directories (тест PUBLI C $ {CMAKE_CURRENT_SOURCE_DIR} /../ include)

target_link_libraries (тест MainProjectLib $ {GTEST_LIBRARIES})

и мой основной. 1045 * выглядит следующим образом.

#include "file_in_test1.cpp"
#include "file_in_test2.cpp"
#include <gtest/gtest.h>

int main(int argc, char **argv) {
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

Я прочитал несколько примеров, которые используют стандартную библиотеку CTest для модульного тестирования, но я использую Google Test. Я хотел бы иметь возможность запустить cmake, make, а затем ./test, чтобы запустить все методы тестирования, найденные в file_in_test1. cpp и file_in_test2. cpp без прямого импорта этих файлов в test / main. cpp. Какие дополнения к CMakeLists.txt мне нужно сделать?

1 Ответ

0 голосов
/ 16 февраля 2020

Одна строка, которую вы могли бы добавить в конце, была бы:

gtest_discover_tests(test)

Это замена для gtest_add_tests, а затем после того, как вы все построите, вы можете просто запустить ctest, и это даст вам хорошее резюме тестов, которые он только что провел. Вы можете прочитать больше об этой опции здесь .

Также, как примечание, вероятно, было бы лучше сделать отдельные тестовые файлы для каждого из ваших тестов, а не включать . cpp файлов в вашем основном тестовом файле.

Обычно я определяю опцию, разрешающую тестирование, и функцию, которая создает нужный мне тест (см. Ниже):

option(build_all_tests "Build all unit tests in the test directory." OFF)

if (build_all_tests)
    include(CTest)
    include(GoogleTest)

    enable_testing()

    ## Function to create a new test based off the pre-defined naming template ##
    function(new_test testname interiorDirectory)
        add_executable(${testname} ${interiorDirectory}/${testname}.cpp)

        target_link_libraries(${testname} ${GTEST_LIBRARIES})

        gtest_discover_tests(${testname}
                        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${interiorDirectory})
    endfunction(new_test)

    ## Locate GTest ##
    find_package(GTest REQUIRED)
    include_directories(${GTEST_INCLUDE_DIRS})

    ## Create all tests ##
    new_test(test1 test/test1)
    new_test(test2 test/test2)
    ...
endif()
...