gpt4 book ai didi

unit-testing - 使用 CTest 运行嵌套测试

转载 作者:行者123 更新时间:2023-12-04 04:46:22 29 4
gpt4 key购买 nike

我有一个小但不平凡的项目,由于架构原因,它被构建为三个独立的项目,它们是相互依赖的,所以除非我特别专注,或者改进测试覆盖率发现了一个漏洞,否则它是有意义的我从项目根目录开始工作。

布局是这样的:

/CMakeLists.txt
/build/
/src/command-line-application/
/src/command-line-application/CMakeLists.txt
/src/command-line-application/build/
/src/command-line-application/src/
/src/command-line-application/tests/
/src/command-line-application/include/
/src/vlc-plugin/
/src/vlc-plugin/src/
/src/libmyproject/
/src/libmyproject/CMakeLists.txt
/src/libmyproject/build/
/src/libmyproject/src/
/src/libmyproject/tests/
/src/libmyproject/include/
/src/libmyotherproject/
/src/libmyotherproject/CMakeLists.txt
/src/libmyotherproject/build/
/src/libmyotherproject/src/
/src/libmyotherproject/tests/
/src/libmyotherproject/include/

关于架构的一句话, libmyproject是我的应用程序的真正核心,它以这种方式构建,因为 CLI 是一种将代码发送给最终用户的可怕方式,作为库,它也被 C# 和 Objective-C 应用程序使用。 (所有这些都按预期工作)
libmyotherproject是一些平台特定的支持代码,没有直接连接到 libmyproject ,它有一些单元测试。
vlc-plugin在这里并不重要,只是为了表明 /src/*/ 中并非所有内容有单元测试。

我的工作流程通常是破解 CLI 应用程序,直到出现有用的东西,然后将其重构到库中,并确保它是可移植的。

当我在 /src/*/build/ 工作时,通常运行 cmake ../ && make && ctest --output-on-failure ,一切正常。

当我在 /build 工作时,然后运行 ​​ cmake ,各个组件是从 CMake 正确构建的(使用 add_subdirectories()),但是 CTest不会递归地找到测试。
CTest 的文档对你应该做的事情有点无益:
USAGE
ctest [options]

DESCRIPTION
The "ctest" executable is the CMake test driver program. CMake-generated build trees created for
projects that use the ENABLE_TESTING and ADD_TEST commands have testing support. This program will
run the tests and report results.

我本来希望从 ADD_TEST() 开始电话住在 /src/libmyotherproject/tests/CMakeLists.txt ,他们会被运行? (它们至少在我从 cmake 运行 /build/ 时被编译)

我希望我能够提供足够的信息,谢谢。

最佳答案


include(CTest)

在进行任何 add_subdirectory 调用之前,在顶级 CMakeLists.txt 文件中。

这将为您调用 enable_testing ,如果您想在项目上运行 ctest 仪表板脚本以将结果发送到 CDash 服务器,还可以进行设置。

关于unit-testing - 使用 CTest 运行嵌套测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8716199/

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