4.6 预期测试失败
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 来完成我们的任务:
- 这个示例中,不需要任何语言支持从 CMake,但需要 Python:
cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(recipe-06 LANGUAGES NONE) find_package(PythonInterp REQUIRED)
- 然后,定义测试并告诉 CMake,测试预期会失败:
enable_testing() add_test(example ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test.py) set_tests_properties(example PROPERTIES WILL_FAIL true)
- 最后,报告是一个成功的测试,如下所示:
$ 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_EXPRESSION
和 FAIL_REGULAR_EXPRESSION
与 set_tests_properties
组合使用。如果设置了这些参数,测试输出将根据参数给出的正则表达式列表进行检查,如果匹配了正则表达式,测试将通过或失败。可以在测试中设置其他属性,完整的属性列表可以参考: https://cmake.org/cmake/help/v3.5/manual/cmake-properties.7.html#properties-on-tests 。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论