Shaw0xyz 发表于 2024-7-12 17:26:58

cmake应用 - 集成gtest进行单元测试

本帖最后由 Shaw0xyz 于 2024-7-13 16:18 编辑

1. 引言

在软件开发过程中,单元测试是确保代码质量和稳定性的重要手段。Google Test(简称gtest)是一个广泛使用的C++测试框架,提供了丰富的功能和易用的接口。本文将介绍如何在CMake项目中集成gtest,进行单元测试,从环境配置到编写和运行测试用例的完整过程。

1.1 CMake简介

CMake是一个跨平台的构建系统,旨在简化项目的编译、测试和打包。它使用CMakeLists.txt文件定义项目的构建配置,并生成适合于各种平台的构建文件。

1.2 Google Test简介

Google Test是一个用于C++的开源测试框架,提供了一组简单而强大的断言(assertions),用于编写和运行单元测试。它支持自动化测试、参数化测试和多线程测试,适用于各种规模的项目。

2. 环境配置

2.1 安装CMake

从CMake官方网站下载并安装最新版本的CMake。安装完成后,可以通过以下命令检查CMake版本:

cmake --version

2.2 安装Google Test

有多种方式可以在项目中使用gtest,最常见的是通过Git子模块或包管理器安装。本文将介绍如何通过Git子模块的方式集成gtest。

在项目根目录下运行以下命令,将gtest添加为子模块:

git submodule add <a href="https://github.com/google/googletest.git" target="_blank">https://github.com/google/googletest.git</a>
git submodule update --init

3. 配置CMakeLists.txt

在项目的CMakeLists.txt文件中,添加对gtest的支持。

3.1 引入gtest

在CMakeLists.txt文件中,引入gtest和gtest_main库:

add_subdirectory(googletest)
include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})

3.2 添加测试目标

假设项目中有一个名为`my_project`的目标,下面的示例展示了如何添加一个名为`runTests`的测试目标:

add_executable(runTests test_main.cpp)
target_link_libraries(runTests gtest gtest_main)

4. 编写测试用例

在项目的测试目录中,创建一个名为`test_main.cpp`的文件,并编写测试用例。

4.1 示例测试用例

下面是一个简单的测试用例,测试一个加法函数:

#include <gtest/gtest.h>

// 被测试的加法函数
int add(int a, int b) {
    return a + b;
}

// 测试用例
TEST(AddTest, PositiveNumbers) {
    EXPECT_EQ(add(1, 2), 3);
}

TEST(AddTest, NegativeNumbers) {
    EXPECT_EQ(add(-1, -2), -3);
}

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

5. 运行测试

使用以下命令构建项目并运行测试:

mkdir build
cd build
cmake ..
make
./runTests

运行结果将显示测试用例的执行情况,包括通过和失败的测试。

6. 高级配置

6.1 参数化测试

gtest支持参数化测试,可以用来测试一组不同输入下的函数行为。下面是一个参数化测试的示例:

#include <gtest/gtest.h>

class AddTest : public ::testing::TestWithParam<std::tuple<int, int, int>> {};

TEST_P(AddTest, HandlesVariousInputs) {
    int a, b, expected;
    std::tie(a, b, expected) = GetParam();
    EXPECT_EQ(add(a, b), expected);
}

INSTANTIATE_TEST_SUITE_P(AddTestInstantiation, AddTest,
    ::testing::Values(
      std::make_tuple(1, 2, 3),
      std::make_tuple(-1, -2, -3),
      std::make_tuple(0, 0, 0)
    ));

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

6.2 生成测试报告

可以使用CTest生成测试报告。首先,在CMakeLists.txt文件中启用测试支持:

enable_testing()
add_test(NAME runTests COMMAND runTests)

然后,使用以下命令运行所有测试并生成报告:

ctest

7. 总结

本文介绍了如何在CMake项目中集成gtest进行单元测试,包括环境配置、编写测试用例、运行测试和高级配置。通过这种方式,开发者可以高效地进行C++项目的单元测试,确保代码的质量和稳定性。希望本文能为您在实际项目中提供有用的参考。









/ 荔枝学姐de课后专栏 /

Hi!这里是荔枝学姐~

欢迎来到我的课后专栏

自然语言学渣 NLP摆烂姐

热衷于技术写作 IT边角料

AIGC & Coding & Linux ...

~互撩~ TG: @Shaw_0xyz
页: [1]
查看完整版本: cmake应用 - 集成gtest进行单元测试