首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Catch2测试我的CMake静态库项目?

如何使用Catch2测试我的CMake静态库项目?
EN

Stack Overflow用户
提问于 2019-03-19 02:09:39
回答 1查看 1.9K关注 0票数 3

我正在编写一个静态库,其中包含一些在几个项目之间共享的代码。为了验证这个库中的代码是否正常工作,我想使用Catch2对它进行一些单元测试。

不幸的是,在尝试运行测试时,我遇到了这样的问题:编译的输出文件是共享库(.a),而不是可执行文件。

我确信我可以创建一个单独的项目,使用我的静态库中的函数,然后以这种方式运行测试,但理想情况下,我希望测试和构建配置尽可能地接近彼此。

所以我的问题是:设置项目的最佳方式是什么,以便我可以使用Catch2对静态库代码进行单元测试?

下面是我的项目的CMakeLists.txt文件以供参考:

代码语言:javascript
运行
复制
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/)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-11 03:39:01

测试静态库的一个常见模式是有一个单独的可执行文件,其中包含所有测试,然后使用您的库。例如

代码语言:javascript
运行
复制
file (GLOB_RECURSE TEST_SOURCES tests/*.cpp)
add_executable(my_lib_tests test_main.cpp ${TEST_SOURCES})
target_link_libraries(my_lib_tests PRIVATE sharedLib)
target_include_directories(my_lib_tests PRIVATE ../path/to/secret/impl/details)

这里我还向共享库的实现细节添加了一些包含一些目录,您可能需要对其进行测试,但不希望通过公共标头向客户端公开。

test_main.cpp只需:

代码语言:javascript
运行
复制
#define CONFIG_CATCH_MAIN
#include <catch2/catch.hpp>

然后,您不必在库的构建中包含与库本身无关的内容,从而加快了客户端的编译时间,同时您可以从测试夹具的角度进行工作

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55227598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档