返回介绍

4.4 使用 Boost Test 进行单元测试

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

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

Boost Test 是在 C++社区中,一个非常流行的单元测试框架。本例中,我们将演示如何使用 Boost Test,对求和示例代码进行单元测试。

准备工作

main.cppsum_integers.cppsum_integers.hpp 与之前的示例相同,将更新 test.cpp 作为使用 Boost Test 库进行的单元测试:

#include "sum_integers.hpp"
​
#include <vector>
​
#define BOOST_TEST_MODULE example_test_suite
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(add_example)
{
  auto integers = {1, 2, 3, 4, 5};
  auto result = sum_integers(integers);
  BOOST_REQUIRE(result == 15);
}

具体实施

以下是使用 Boost Test 构建项目的步骤:

  1. 先从 CMakeLists.txt 开始:
    # set minimum cmake version
    cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
    ​
    # project name and language
    project(recipe-04 LANGUAGES CXX)
    ​
    # require C++11
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_EXTENSIONS OFF)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    ​
    # example library
    add_library(sum_integers sum_integers.cpp)
    ​
    # main code
    add_executable(sum_up main.cpp)
    target_link_libraries(sum_up sum_integers)
  2. 检测 Boost 库并将 cpp_test 链接到它:
    find_package(Boost 1.54 REQUIRED COMPONENTS unit_test_framework)
    ​
    add_executable(cpp_test test.cpp)
    ​
    target_link_libraries(cpp_test
      PRIVATE
        sum_integers
        Boost::unit_test_framework
      )
    ​
    # avoid undefined reference to "main" in test.cpp
    target_compile_definitions(cpp_test
      PRIVATE
          BOOST_TEST_DYN_LINK
      )
  3. 最后,定义单元测试:
    enable_testing()
    ​
    add_test(
      NAME boost_test
      COMMAND $<TARGET_FILE:cpp_test>
      )
  4. 下面是需要配置、构建和测试代码的所有内容:
    $ mkdir -p build
    $ cd build
    $ cmake ..
    $ cmake --build .
    $ ctest
    ​
    Test project /home/user/cmake-recipes/chapter-04/recipe-04/cxx-example/build
    Start 1: boost_test
    1/1 Test #1: boost_test ....................... Passed 0.01 sec
    100% tests passed, 0 tests failed out of 1
    Total Test time (real) = 0.01 sec
    ​
    $ ./cpp_test
    ​
    Running 1 test case...
    *** No errors detected

工作原理

使用 find_package 来检测 Boost 的 unit_test_framework 组件(参见第 3 章,第 8 节)。我们认为这个组件是 REQUIRED 的,如果在系统环境中找不到它,配置将停止。 cpp_test 目标需要知道在哪里可以找到 Boost 头文件,并且需要链接到相应的库;它们都由 IMPORTED 库目标 Boost::unit_test_framework 提供,该目标由 find_package 设置。

更多信息

本示例中,我们假设系统上安装了 Boost。或者,我们可以在编译时获取并构建 Boost 依赖项。然而,Boost 不是轻量级依赖项。我们的示例代码中,我们只使用了最基本的设施,但是 Boost 提供了丰富的特性和选项,有感兴趣的读者可以去这里看看: http://www.boost.org/doc/libs/1_65_1/libs/test/doc/html/index.html

发布评论

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