0


一个简单的实操学会使用cmake将googletest组织到C++工程中,进行单元测试并分析结果(附实操源码)

对于使用 CMake 将 GoogleTest 集成到 C++ 项目中,可以通过将 GoogleTest 作为子模块添加到项目中并适当设置 CMakeLists.txt 文件来完成。以下是步骤的详细说明和相关文件的配置。

使用cmake将googletest组织到C++工程中,进行代码单元测试并分析结果

1. 准备项目结构

假设项目结构如下:

MyProject/
|-- CMakeLists.txt
|-- src/
|   |-- CMakeLists.txt
|   |-- example.cpp
|   |-- example.h
|-- tests/
    |-- CMakeLists.txt
    |-- test_example.cpp
|-- extern/
    |-- googletest/

2. 添加 GoogleTest 作为工程子模块

在项目根目录下运行以下命令以添加 GoogleTest 为子模块:
查看自己环境cmake版本:

cmake --version

① 以我的环境cmake为3.10.0版本为例,对应下载googletest的v1.13.0版本,网址:https://github.com/google/googletest/releases/tag/v1.13.0,可以自行下载解压到MyProject/extern/文件夹下。

② 如果环境的cmake为大于等于3.14.0版本,则可以直接执行下面命令,下载最新版googletest:

cd MyProject/extern
git clone [email protected]:google/googletest.git

3. 编辑 CMakeLists.txt 文件

根目录 CMakeLists.txt

在项目的根目录 CMakeLists.txt 文件中,你需要添加对子目录的引用和基本的项目设置。

cmake_minimum_required(VERSION 3.10)
project(MyProject)

# Enable C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# Add subdirectories
add_subdirectory(src)
add_subdirectory(tests)
add_subdirectory(extern/googletest)
src 目录下的 CMakeLists.txt

在 src 目录的 CMakeLists.txt 文件中,添加构建应用程序所需的源文件。

add_library(core example.cpp)

target_include_directories(core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
tests 目录下的 CMakeLists.txt

在 tests 目录的 CMakeLists.txt 文件中,设置测试的构建和链接:

# 指定测试可执行文件
add_executable(runTests test_example.cpp)

# 链接 Google Test 的库和应用库
target_link_libraries(runTests gtest gtest_main core)

# 启用测试
enable_testing()

# 添加测试
add_test(NAME example_tests COMMAND runTests)

4. 源代码和测试代码

确保你有正确的头文件和源代码实现。

example.h
#ifndefEXAMPLE_H#defineEXAMPLE_Hintadd(int a,int b);intsubtract(int a,int b);#endif// EXAMPLE_H
example.cpp
#include"example.h"intadd(int a,int b){return a + b;}intsubtract(int a,int b){return a - b;}
test_example.cpp
#include"gtest/gtest.h"#include"../src/example.h"TEST(ExampleTest, AddsTwoNumbers){EXPECT_EQ(add(1,2),3);}TEST(ExampleTest, SubtractsTwoNumbers){EXPECT_EQ(subtract(2,1),1);}// 由于上文tests目录下CMakeLists.txt文件中链接了gtest_main库( target_link_libraries(runTests gtest gtest_main core) ),所以此处main()函数不用自己定义// 如果tests目录下CMakeLists.txt文件中没有链接gtest_main库,此处需要自己定义main()函数,如下面注释// 链接gtest_main库和自己定义main()函数两者只能存在一个,并且至少存在一个/*
int main(int argc, char** argv) 
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
*/

5. 编译和运行测试

在项目的根目录下创建一个构建目录,配置项目,构建项目并运行测试:

mkdir build
cd build
cmake ..make-j20
./tests/runTests

6. 执行结果输出

[==========] Running 2 tests from 1test suite.
[----------] Global test environment set-up.
[----------]2 tests from ExampleTest
[ RUN      ] ExampleTest.AddsTwoNumbers
[       OK ] ExampleTest.AddsTwoNumbers (0 ms)[ RUN      ] ExampleTest.SubtractsTwoNumbers
[       OK ] ExampleTest.SubtractsTwoNumbers (0 ms)[----------]2 tests from ExampleTest (0 ms total)[----------] Global test environment tear-down
[==========]2 tests from 1test suite ran. (1 ms total)[  PASSED  ]2 tests.

这是上述示例输出,显示了 Google Test 框架如何运行并报告测试结果。这段输出说明了两个单元测试都通过了,并且没有发生任何错误。接下来,将解释输出中各部分的意义以及如何阅读这些结果。

7. 结果输出分析

  1. 测试总览:[==========] Running 2 tests from 1test suite.这一行表示正在运行一个包含两个测试的测试套件。
  2. 全局测试环境设置:[----------] Global test environment set-up.这表明全局测试环境正在被设置。这通常包括为所有测试准备必需的资源或配置。
  3. 测试套件信息:[----------]2 tests from ExampleTest这表示有一个名为 “ExampleTest” 的测试套件包含两个测试。
  4. 单个测试运行:[ RUN ] ExampleTest.AddsTwoNumbers[ OK ] ExampleTest.AddsTwoNumbers (0 ms)这两行表明 “AddsTwoNumbers” 测试正在运行,并且已成功完成,执行时间为 0 毫秒。[ RUN ] ExampleTest.SubtractsTwoNumbers[ OK ] ExampleTest.SubtractsTwoNumbers (0 ms)这两行表示 “SubtractsTwoNumbers” 测试也正在运行并且已成功通过,同样耗时 0 毫秒。
  5. 测试套件总结:[----------]2 tests from ExampleTest (0 ms total)这表示 “ExampleTest” 测试套件中的两个测试已全部完成,总计耗时 0 毫秒。
  6. 全局测试环境清理:[----------] Global test environment tear-down这表明全局测试环境正在被清理。这通常包括释放全局资源或执行其他清理任务。
  7. 最终结果总结:[==========]2 tests from 1test suite ran. (1 ms total)[ PASSED ]2 tests.这两行提供了最终的测试结果总结。表明已运行一个测试套件中的两个测试,总耗时 1 毫秒,并且所有测试都已通过。

总结

通过以上步骤,可以将 Google Test 集成到任何使用 CMake 管理的 C++ 项目中,这样可以方便地编写和运行单元测试。确保项目的文件路径和模块设置正确,以避免在构建和运行测试时出现问题。


本文转载自: https://blog.csdn.net/weixin_44046545/article/details/138455874
版权归原作者 Warren++ 所有, 如有侵权,请联系我们删除。

“一个简单的实操学会使用cmake将googletest组织到C++工程中,进行单元测试并分析结果(附实操源码)”的评论:

还没有评论