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.