返回介绍

4.6 预期测试失败

发布于 2025-05-06 21:45:55 字数 2105 浏览 0 评论 0 收藏 0

NOTE : 此示例代码可以在 https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-04/recipe-06 中找到,包含一个 C++的示例。该示例在 CMake 3.5 版(或更高版本) 中是有效的,并且已经在 GNU/Linux、macOS 和 Windows 上进行过测试。

理想情况下,我们希望所有的测试能在每个平台上通过。然而,也可能想要测试预期的失败或异常是否会在受控的设置中进行。这种情况下,我们将把预期的失败定义为成功。我们认为,这通常应该交给测试框架(例如:Catch2 或 Google Test) 的任务,它应该检查预期的失败并向 CMake 报告成功。但是,在某些情况下,您可能希望将测试的非零返回代码定义为成功;换句话说,您可能想要颠倒成功和失败的定义。在本示例中,我们将演示这种情况。

准备工作

这个配置的测试用例是一个很小的 Python 脚本( test.py ),它总是返回 1,CMake 将其解释为失败:

import sys
​
# simulate a failing test
sys.exit(1)

实施步骤

如何编写 CMakeLists.txt 来完成我们的任务:

  1. 这个示例中,不需要任何语言支持从 CMake,但需要 Python:
    cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
    project(recipe-06 LANGUAGES NONE)
    find_package(PythonInterp REQUIRED)
  2. 然后,定义测试并告诉 CMake,测试预期会失败:
    enable_testing()
    add_test(example ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test.py)
    set_tests_properties(example PROPERTIES WILL_FAIL true)
  3. 最后,报告是一个成功的测试,如下所示:
    $ mkdir -p build
    $ cd build
    $ cmake ..
    $ cmake --build .
    $ ctest
    ​
    Test project /home/user/cmake-recipes/chapter-04/recipe-06/example/build
    Start 1: example
    1/1 Test #1: example .......................... Passed 0.00 sec
    100% tests passed, 0 tests failed out of 1
    Total Test time (real) = 0.01 sec

工作原理

使用 set_tests_properties(example PROPERTIES WILL_FAIL true) ,将属性 WILL_FAIL 设置为 true ,这将转换成功与失败。但是,这个特性不应该用来临时修复损坏的测试。

更多信息

如果需要更大的灵活性,可以将测试属性 PASS_REGULAR_EXPRESSIONFAIL_REGULAR_EXPRESSIONset_tests_properties 组合使用。如果设置了这些参数,测试输出将根据参数给出的正则表达式列表进行检查,如果匹配了正则表达式,测试将通过或失败。可以在测试中设置其他属性,完整的属性列表可以参考: https://cmake.org/cmake/help/v3.5/manual/cmake-properties.7.html#properties-on-tests

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。