Как я могу использовать Catch2 для тестирования моего проекта статической библиотеки CMake? - PullRequest
0 голосов
/ 18 марта 2019

Я пишу статическую библиотеку, которая содержит некоторый общий код между несколькими проектами.Чтобы убедиться, что код в этой библиотеке работает должным образом, я хотел бы использовать Catch2, чтобы выполнить некоторое модульное тестирование на нем.

К сожалению, при попытке запустить тесты я столкнулся с проблемой, что вывод компиляцииФайл - это общая библиотека (.a), а не исполняемый файл.

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

Поэтому мой вопрос: каков наилучший способ настроить мой проект так, чтобы я мог использовать Catch2 для модульного тестирования моей статической библиотеки?code?

Вот файл CMakeLists.txt моего проекта для справки:

project(sharedLib CXX)

find_package(OpenMP)

if (CMAKE_COMPILER_IS_GNUCC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp -lpthread -Wall -Wextra -Wpedantic -std=c++17")
endif()

if (MSVC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fopenmp /W4 /std:c++latest")
endif()

include_directories (
        src/
        lib/Catch2/single_include/
)

file (GLOB_RECURSE LIBRARY_SOURCES src/*.cpp
                                   src/*.c
                                   tests/*.cpp)

add_library(${PROJECT_NAME} STATIC ${LIBRARY_SOURCES})

target_include_directories(${PROJECT_NAME} PUBLIC src/)

1 Ответ

1 голос
/ 18 марта 2019

Как уже указывалось в вики-теге catch2 (выделено мной):

он выпускается как единственный включаемый файл и позволяет использовать естественные выражения C ++ внутри утверждений

Таким образом, нет необходимости добавлять какую-либо библиотеку для него. Достаточно включить заголовок в исходный код модульного тестирования.

То же самое указано на странице readme в размещенном проекте GitHub:

Что за улов?

Catch2 обозначает C ++ Automated Test Cases в заголовке и представляет собой многопарадигмальный тестовый фреймворк для C ++. который также поддерживает Objective-C (и, возможно, C). Он в основном распространяется как файл с одним заголовком , хотя для некоторых расширений могут потребоваться дополнительные заголовки.

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

#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file

К сожалению, при попытке запустить тесты я столкнулся с проблемой, что выходной файл компиляции является общей библиотекой (.a), а не исполняемым файлом.

Итак, вы объявили свой тип проекта CMake следующим образом:

project(sharedLib CXX)

Для получения дополнительной информации о том, как правильно настроить проекты модульного тестирования CMake, см. Этот раздел вопросов и ответов

пожалуйста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...