gpt4 book ai didi

c++ - CMake + boost 测试 : ignore tests that fail to build

转载 作者:行者123 更新时间:2023-11-28 05:46:06 25 4
gpt4 key购买 nike

我们的 C++ 项目在 Boost/Test 中实现了相对较多的测试套件。所有测试都远离主项目的树,每个测试套件都位于单独的 .cpp 文件中。因此,我们当前用于测试的 CMakeLists.txt 如下所示:

cmake_minimum_required(VERSION 2.6)

project(TEST_PROJECT)
find_package(Boost COMPONENTS unit_test_framework REQUIRED)

set(SPEC_SOURCES
main.cpp
spec_foo.cpp
spec_bar.cpp
...
)

set(MAIN_PATH some/path/to/our/main/tree)
set(MAIN_SOURCES
${MAIN_PATH}/foo.cpp
${MAIN_PATH}/bar.cpp
...
)

add_executable (test_project
${SPEC_SOURCES}
${MAIN_SOURCES}
)

target_link_libraries(test_project
${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}
)

add_test(test_project test_project)

enable_testing()

它工作正常,但问题是 SPEC_SOURCESMAIN_SOURCES 是相当长的列表,有时有人会破坏主树或规范源文件中的任何一个文件。反过来,这使得构建目标可执行文件和测试其余部分变得不可能。必须手动找出损坏的地方,进入 CMakeLists.txt 并注释掉编译失败的部分。

那么,问题:有没有一种方法可以忽略无法在 CMake 中自动构建的测试,编译、链接并运行其余测试(理想情况下,将失败的标记为“构建失败” ")?

远程相关问题 Best practice using boost test and tests that should not compile建议在 CMake 中使用 try_compile 命令。然而,在它的裸体形式中,它只是执行新的临时生成的 CMakeList(它将像原始的一样失败)并且没有任何钩子(Hook)来删除不可编译的单元。

最佳答案

我认为您的测试方法存在一些问题。

One has to manually figure out what was broken, go into CMakeLists.txt and comment out parts that fail to compile.

如果您的单元测试覆盖率很高,您应该能够非常快速地识别和定位问题。持续集成(例如 Jenkins、Buildbot、Travis (GitHub))可能非常有帮助。他们将运行您的测试,即使一些开发人员在提交之前没有这样做。

您还假设只需要从构建中删除一个非编译类(及其测试)。但是传递依赖性又如何呢,其中一个非编译类会破坏其他类的编译或导致链接错误。破坏构建的测试呢?所有这些事情都发生在开发过程中。

我建议您将构建分成许多库,每个库都有自己的测试运行器。把属于一起的东西放在一起(凝聚力)。尽量减少编译中的依赖性(依赖注入(inject)、接口(interface)……)。这将允许通过编译库和测试运行器来继续开发,即使某些库没有编译(一段时间)。

关于c++ - CMake + boost 测试 : ignore tests that fail to build,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36166848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com