添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
自信的芒果  ·  [Solved] Problem with ...·  1 年前    · 
本文介绍了Gtest,它是Google发布的跨平台C++单元测试框架,能提供自动化测试程序的框架。还讲述了其安装过程,包括编译、交叉编译和示例编译,给出了第一个测试程序的编译方法,最后提及编译得到的库文件,后续将介绍常用宏的用法。 摘要生成于 ,由 DeepSeek-R1 满血版支持,

Googletest的入门安装和使用

1. Gtest介绍

gtest是一个跨平台的(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)C++单元测试框架,由google公司发布。gtest是为在不同平台上为编写C++测试而生成的。它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。
一句话就是Gtest提供了一种自动化测试程序的框架。方便快速的验证程序的逻辑性和健壮性。

2. Gtest安装

和所有的第三方库一样,安装之前需要先下载源代码。小伙伴们可以通过google官网进行下载 google官网 ,当然在国内不翻墙是不能登入到google的。所以在此我们只能通过github进行下载 googletest 。如下:

	首先创建一个工作目录gtest
	mkdir ~/gtest
	cd ~/gtest
	git clone https://github.com/google/googletest.git

下载完成之后接下来就可以针对不同的平台进行编译和使用了。下面将针对Ubuntu和linux ARM进行测试。

2.1. Gtest编译

Gtest提供了两种方式编译源码库:automake和cmake,在此我们将以cmake方式进行编译。
编译之前我们先创建一个编译目录gtest-build,这样避免在源码目录进行编译造成污染问题。

创建一个编译目录
mkdir ~/gtest/gtest-build
cd gtest-build
cmake ../googletest -DCMAKE_INSTALL_PREFIX=./_install
make && make install

执行以上命令后将会在_install目录下看到编译产出的文件了。

├── include │ ├── gmock │ └── gtest └── lib ├── cmake ├── libgmock.a ├── libgmock_main.a ├── libgtest.a ├── libgtest_main.a └── pkgconfig

2.2. Gtest交叉编译

狭义简单理解交叉编译就是人为的指定目标平台的工具链进行编译产出可执行文件或库文件。 使用默认的工具链通常情况即为宿主机编译。
既然是这样那我们将在前面编译的基础上指定工具链就可以了。

创建一个arm平台编译目录
mkdir ~/gtest/gtest-build-arm
cd gtest-build
cmake ../googletest -DCMAKE_INSTALL_PREFIX=./_install -DCMAKE_CXX_COMPILER=${TOOLCHAIN_PATH}/bin/aarch64-rockchip-linux-gnu-g++
make && make install

2.3. Gtest example编译

Gtest源码库直接提供了大量的测试用例,我们可以直接拿来参考和学习。
首先我们可以直接进行编译并运行测试进行感知Gtest的使用过程。那么应该如何编译呢,我们只需在上面编译的选项中添加一个宏即可:gtest_build_samples=ON,然后重新编译将会在googlemock/gtest看到多 了一些可执行文件:

googlemock/gtest/
├── CMakeFiles
├── cmake_install.cmake
├── CTestTestfile.cmake
├── generated
├── Makefile
├── sample10_unittest
├── sample1_unittest
├── sample2_unittest
├── sample3_unittest
├── sample4_unittest
├── sample5_unittest
├── sample6_unittest
├── sample7_unittest
├── sample8_unittest
└── sample9_unittest
2 directories, 13 files

3. Gtest第一个测试程序

// gtest_sum.cpp
#include <iostream>
#include <gtest/gtest.h>
int sum(int a, int b) {
	return a+b;
TEST(sum, testSum) {
	EXPECT_EQ(5, sum(2, 3));	// 求合2+3=5
	EXPECT_NE(3, sum(3, 4));	// 求合3+4 != 3
// 如果在此处不写main函数,那么在链接库的时候还需要链接-lgtest_main, 否则只需链接-lgtest即可。
#if 0
int main(int argc, char **argv)
 testing::InitGoogleTest(&argc, argv);
 return RUN_ALL_TESTS();
#endif

编译测试程序:

g++ -o gtest_sum gtest_sum.cpp -I${HOME}/gtest/gtest-build/_install/include \
	-L${HOME}/gtest/gtest-build/_install/lib -lgtest_main -lgtest -lpthread -std=c++11

编译完成后将会产出一个gtest_sum的可执行文件。
执行:
./gtest_sum

Running main() from /home/sven/work/3rd/googletest/googletest/src/gtest_main.cc
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from sum
[ RUN      ] sum.testSum
[       OK ] sum.testSum (0 ms)
[----------] 1 test from sum (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[  PASSED  ] 1 test.

4. Gtest库的作用

经过以上流程我们已经对gtest的使用有了一些感知。并且通过编译源码库会得到相关的库文件:

  • libgtest.a
  • libgtest_main.a
  • libgmock.a
  • libgmock_main.a
    那么他们之间有什么联系和区别呢。
gtest是googletest基础测试 框架,在进行单元测试必须创建实例对象及具体行为。 这样在实际情况下可能不需要这样做,
某些情况下只需要模拟构建一个虚假的实例即可验证程序的逻辑性。这样将引入了gmock测试框架,它依赖于gtest。
一个mock对象实现与一个真实对象相同的接口,并且可以在运行时进行指定预期的值具有很大的灵活性。
gtest_main和gmock_main可以让测试者无需在为每次测试用例写入main函数。

下一章节我们将介绍Gtest中常用的宏的基本用法,如EXPECT_*和ASSERT_*等;

google 开源的跨平台C++单元测试框架,是为在不同平台上为编写C++测试而生成的。它提供了丰富的断言、致命非致命判断、参数化、”死亡测试”等等。 不推荐将gtest直接安装到/usr/local下,当多个项目的gtest有不同配置时,将会产生难以debug的问题。 所以官方推荐将gtest作为每个项目的子项目单独管理。 用起来普通的库差不多,只需要设置 include & 修改 main 文件 指定 头文件 源文件 目录 指定 连接的库 安装方式1:作为独立项 # 克隆仓库 # 慢的话就上proxy git clone https://github.com/google/googletest.git --config https.proxy=https://ip:port git clone https://github.com/google/googletest.git cd googletest mkdir build cmake .. -DB
    gtest全称Google Test,是Google的C++测试框架,有很多优秀的软件都会依赖这个环境编译或者在开发中也会用到,gtest的编译非常简单,下面简单说明一下安装过程.     gtest github源码仓库:https://github.com/google/googletest     可以从仓库克隆最新代码或者下载release包,目前最新release版为1.8.0,...
注意到,在googletest / build / lib目录下面有四个文件libgmock.a libgmock_main.a libgtest.a libgtest_main.a 在googletest / googlemock / include目录下有一个文件夹 gmock...
gTest的用法一.什么是gTest二.gTest概念解释2.gtest系列之TEST宏3.gtest系列之断言(1)ASSERT_系列(2)EXPECT_系列,也是具有类似的宏结构的4. gtest系列之事件机制5. gtest系列之死亡测试三.gTest框架demo1.无事件机制的TEST2.使用TEST_F宏命令(TestSuite事件) 一.什么是gTest gtest是一个跨平台的(Liunx、Mac OS X、Windows 、Cygwin 、Windows CE and Symbian ) C