使用GoogleTest框架进行cpp代码的基本单元测试

发布时间 2023-10-11 19:41:33作者: pomolnc
title: 
aliases: 
tags:
  - cpp/单元测试
  - cmake
  - 工程技术
category:
  - 方法
stars: 
url: 
creation-time: 2023-10-11 19:02
modification-time:

这里主要介绍从 0 开始实现基本的单元测试功能。

构建

首先从 googletest 代码仓下载源码。

网上很多指导包括官方的指南中的方法都是在构建的时候让 [[cmake]] 去帮忙拉取源码,这种方式可能对于国内的网络环境不是很友好,所以我选择的是自己把源码下载下来,放到项目的相关目录中。

然后在项目的 CMakeList.txt 中导入 googletest 的源码。
官方的指南里面,使用了 PkgConfig 工具。[1]但是我按照指南里的方式一直找不到相关的 .pc 文件。所以我自己是采取了另外一种方式。
googletest 的源码中有自己的 CMakeList.txt ,所以在项目的 CMakeList.txt 中直接用 add_subdirectory 命令将其添加进去即可。

add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/googletest/"
                 "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/googletest/build")
set(SOURCES unit_test.cc )
add_executable(unittest ${SOURCES})
target_link_libraries(unittest GTest::gtest_main)

基本的单元测试

最简单的单元测试例子如下所示,其中由于我们使用的是 gtest_main 模块,就不用再自己写 main 函数(由 googletest 完成)。

#include <gtest/gtest.h>

int factorial(int n) {
  int result = 1;
  for (int i = 1; i <= n; i++) {
    result *= i;
  }
  return result;
}

TEST(FactorialTest, Negative) {
  EXPECT_EQ(1, factorial(-5));
  EXPECT_EQ(1, factorial(-1));
  EXPECT_GT(factorial(-10), 0);
}

运行效果:

Running main() from D:\Project\manual_control\3rdparty\googletest\googletest\src\gtest_main.cc
[==========] Running 1 tests from 1 test suites.
[----------] Global test environment set-up.

[----------] 1 test from FactorialTest
[ RUN      ] FactorialTest.Negative
[       OK ] FactorialTest.Negative (0 ms)
[----------] 1 test from FactorialTest (2 ms total)

[----------] Global test environment tear-down
[==========] 1 tests from 1 test suites ran. (16 ms total)
[  PASSED  ] 1 tests.

Reference


  1. Using GoogleTest from various build systems | GoogleTest
    手把手教你使用gtest写单元测试 - 知乎 (zhihu.com) ↩︎