gtest单元测试

这篇具有很好参考价值的文章主要介绍了gtest单元测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. gtest是什么?简答:做测试用的

gtest是Google的一套用于编写C++测试的框架,可以运行在很多平台上(包括Linux、Mac OS X、Windows、Cygwin等等)。基于xUnit架构。支持很多好用的特性,包括自动识别测试、丰富的断言、断言自定义、死亡测试、非终止的失败、生成XML报告等等。

2. gtest的优点

  • 测试应该是独立的、可重复的。一个测试的结果不应该作为另一个测试的前提。GTest中每个测试运行在独立的对象中。如果某个测试失败了,可以单独地调试它。
  • 测试应该是有清晰的结构的。GTest的测试有很好的组织结构,易于维护。
  • 测试应该是可移植和可复用的。有很多代码是不依赖平台的,因此它们的测试也需要不依赖于平台。GTest可以在多种操作系统、多种编译器下工作,有很好的可移植性。
  • 测试失败时,应该给出尽可能详尽的信息。GTest在遇到失败时并不停止接下来的测试,而且还可以选择使用非终止的失败来继续执行当前的测试。这样一次可以测试尽可能多的问题。
  • 测试框架应该避免让开发者维护测试框架相关的东西。GTest可以自动识别定义的全部测试,你不需要一一列举它们。简而言之,gtest已经非常的成熟了!!!
  • 测试应该够快。GTest在满足测试独立的前提下,允许你复用共享数据,它们只需创建一次。
  • GTest采用的是xUnit架构,你会发现和JUnit、PyUnit很类似,所以上手非常快。

3. 搭建测试框架

gtest下载地址: https://github.com/google/googletest

所以,
下载方法是:
git clone https://github.com/google/googletest.git

我在下载时出现了以下错误:
正克隆到 'googletest'...
fatal: unable to access 'https://github.com/google/googletest.git/': gnutls_handshake() failed: A TLS packet with unexpected length was received.
问题分析:
这个错误提示表明 Git 无法使用 HTTPS 协议与远程存储库进行通信,
因为在 TLS 握手期间发生了错误。
错误消息 "gnutls_handshake() failed: A TLS packet with unexpected length was received" 
暗示在 TLS 握手期间存在问题。
这可能是由于网络问题、代理服务器、防火墙或其他因素导致的。
解决办法:
禁用 SSL 验证:您可以在 Git 中禁用 SSL 验证,方法是将 "GIT_SSL_NO_VERIFY" 环境变量设置为 "true"。
这不建议,因为它可能会危及您系统的安全性。
如果您必须使用此选项,可以运行以下命令:
export GIT_SSL_NO_VERIFY=true
(因为我尝试了其他办法无法解决这个问题:所以我只能使用这种解决办法)
然后又再执行git clone https://github.com/google/googletest.git即可,
然后可以重新将export GIT_SSL_NO_VERIFY=false或者不设置也行

安装方法是:
cd googletest
cmake .

在执行cmake .时又遇到这个问题:
CMake Error at CMakeLists.txt:4 (cmake_minimum_required):
CMake 3.5 or higher is required.  You are running version 2.8.12.2
解决办法:
提示就是说cmake版本过低,至少要3.5,但是我的cmake是2.8
先回到你项目的根目录,然后执行下面操作
cd ../
wget https://cmake.org/files/v3.22/cmake-3.22.1.tar.gz
tar -xvzf cmake-3.22.1.tar.gz
cd cmake-3.22.1
chmod 777 ./configure
./configure
出现这行字说明上面的执行成功:CMake has bootstrapped.  Now run make.
make
sudo make install
sudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force
cmake --version
# cmake version 3.22.1

如果你版本成功更新请执行:
cd ../
cd googletest
cmake .
注意:如果在make 过程中报错,可在CMakeLists.txt 中增加如下行,再执行下面的命令:  
#添加的部分,关闭警告
add_definitions(-w)

cmake .
make
还是报错:不过报错信息少了很多:
root@WXNNB:/home/wxn/googletest# make
[ 12%] Building CXX object googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
c++: error: unrecognized command line option ‘-stdlib=libc++’
make[2]: *** [googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o] 错误 1
make[1]: *** [googletest/CMakeFiles/gtest.dir/all] 错误 2
make: *** [all] 错误 2
解决办法:cmake -DCMAKE_CXX_FLAGS="-stdlib=libstdc++" ..

还是报错:不过报错信息又少了:
root@WXNNB:/home/wxn/googletest# cmake -DCMAKE_CXX_FLAGS="-stdlib=libstdc++" ..
CMake Error: The source directory "/home/wxn" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.

解决方法:无...推倒重来

刷到一个很棒的文章:https://deepinout.com/gtest-tutorials/gtest-download-and-installation.html
按照上面的做法:
第一步:

git clone https://github.com/google/googletest.git

第一步搞定:!
gtest单元测试

第二步:

cd googletest

第三步:

mkdir build

第四步:

cd build

第五步:

cmake ..

再次报错:

CMake Error at /usr/local/share/cmake-3.22/Modules/CMakeDetermineCCompiler.cmake:49 (message):
  Could not find compiler set in environment variable CC:

  /usr/bin/clang.
Call Stack (most recent call first):
  CMakeLists.txt:18 (project)


CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "/home/wxn/googletest/build/CMakeFiles/CMakeOutput.log".
root@WXNNB:/home/wxn/googletest/build# cmake ..
CMake Error at /usr/local/share/cmake-3.22/Modules/CMakeDetermineCCompiler.cmake:49 (message):
  Could not find compiler set in environment variable CC:

  /usr/bin/clang.
Call Stack (most recent call first):
  CMakeLists.txt:18 (project)


CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "/home/wxn/googletest/build/CMakeFiles/CMakeOutput.log".
这个错误提示表明 CMake 无法找到 C 编译器和 C++ 编译器。错误消息中提到的 "/usr/bin/clang" 是当前系统上默认的 C 编译器。
export CC=/usr/bin/gcc
export CXX=/usr/bin/g++

再次执行cmake …成功!
gtest单元测试
第六步:

make

还是报错:人麻了

然后我换了一台虚拟机:
sudo su
sudo apt install git
git clone https://github.com/google/googletest.git (访问被拒绝,说明你的校园网有问题,不稳定,多试几次)
cd googletest
vi CMakeLists.txt 
SET(CMAKE_CXX_FLAGS "-std=c++11")
:wq
apt install cmake
cmake .
make

你猜一猜怎么着?成功了!居然是虚拟机问题!
gtest单元测试

历史的教训告诉我们,被高兴的太早!
上面成功之后,你还需要尝试一下 l s ls ls l i b lib lib命令与 m a k e make make i n s t a l l install install命令,我第一次执行 l s ls ls l i b lib lib命令 成功 成功 成功,但是执行 m a k e make make i n s t a l l install install命令失败!无奈~我又卸了重安,第二次才成功!如果你和我一样执行了诉上种命令出现了下面这样的结果,我可以告诉你这时gooletest环境才算正式搭建成功!
gtest单元测试

4. gtest_范例演示

代码放在我的代码仓库了,大家可以去去demo文件中查看,写的很详细!
代码地址文章来源地址https://www.toymoban.com/news/detail-478389.html

到了这里,关于gtest单元测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 单元测试学习过程 (1)——gtest

    软件开发完成后需要对代码进行测试,生成测试报告,因此开始学习单元测试。本文基于QT和Linux进行学习。学习目的就是生成测试报告。整个学习过程主要围绕“1.怎么进行单元测试”、“2.怎么生成测试过程的结果文件”、“3.怎么生成代码覆盖率报告”。 1.使用gtest进行单

    2024年02月05日
    浏览(78)
  • cmake应用:集成gtest进行单元测试

    编写代码有bug是很正常的,通过编写完备的单元测试,可以及时发现问题,并且在后续的代码改进中持续观测是否引入了新的bug。对于追求质量的程序员,为自己的代码编写全面的单元测试是必备的基础技能,在编写单元测试的时候也能复盘自己的代码设计,是提高代码质量

    2024年02月13日
    浏览(43)
  • 基于gtest/gmock/mockcpp的单元测试探索

    本文整体内容参考https://www.cnblogs.com/heimianshusheng/p/13530672.html(后面统一称为\\\"引文\\\"),在实际调试中发现了一些问题并予以解决,记录一下方便自己和同道中人查阅。 通过实例演练学习使用gtest对C语言编写的程序进行单元测试 学习如何用mockcpp对C语言的函数进行mock *GitHub上的

    2023年04月21日
    浏览(41)
  • CMake项目使用ctest+gtest进行单元测试

    随着CMake工具越来越强大便捷,越来越多的C/C++项目转而使用CMake来进行编译管理,它还提供了用于测试的ctest命令来执行项目中编写的单元测试。 本文就以一个实例来介绍如何使用ctest来进行单元测试。 本文实例环境VSCode+MinGW64+CMake+gtest。 需要在MinGW中安装gtest,如果没有安装

    2024年02月05日
    浏览(42)
  • C++中的断言机制与gtest单元测试

       这部分内容网上已经有很多人讲了,我就不做重复性工作,制造垃圾了,大家看看下面两个链接就可以了,因为我的专栏除了分享自己学习的知识,主要想为大家提供完整学习路线,让大家的知识体系更加完善! (1)参考:https://www.cnblogs.com/lvchaoshun/p/7816288.html (1)参考:

    2023年04月08日
    浏览(102)
  • 手把手教你使用gtest写单元测试

    开源框架:gtest,它主要用于写单元测试,检查真自己的程序是否符合预期行为。这不是QA(测试工程师)才学的,也是每个优秀后端开发codoer的必备技能。 本期博文内容及使用的demo,参考: Googletest Basic Guide[1] Googletest Samples [2] 构建依赖环境 按照惯例,先介绍下怎么基于

    2024年02月16日
    浏览(49)
  • 玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest

    目录 一、前言 二、从TEST宏开始 三、回过头看看TEST宏的定义 四、再来了解RUN_ALL_TESTS宏 四、总结 “深入解析”对我来说的确有些难度,所以我尽量将我学习到和观察到的gtest内部实现介绍给大家。本文算是抛砖引玉吧,只能是对gtest的整体结构的一些介绍,想要了解更多细节

    2024年02月11日
    浏览(55)
  • 单元测试gtest的安装与使用方法【结合官网的sample】

    gtest单元测试是Google的一套用于编写 C++测试的框架 ,可以运行在很多平台上(包括Linux、Mac OS X、Windows、Cygwin等等)。基于xUnit架构。支持很多好用的特性,包括自动识别测试、丰富的断言、断言自定义、死亡测试、非终止的失败、生成XML报告等等。 好的测试应该有下面的这

    2024年02月10日
    浏览(40)
  • C++单元测试GoogleTest和GoogleMock十分钟快速上手(gtest&gmock)

    下载 安装 重要文件 googletest gtest/gtest.h libgtest.a libgtest_main.a 当不想写 main 函数的时候,可以直接引入 libgtest_main.a; 否则 googlemock gmock/gmock.h libgmock.a libgmock_main.a 一 .断言 gtest 中的断言分成两大类: ASSERT_* 系列:如果检测失败就直接退出 当前函数 EXPECT_* 系列:如果检测失败

    2024年02月06日
    浏览(41)
  • cmake + gtest安装使用 C++单元测试 gcov locv代码覆盖率

    CMakeLists.txt速查简单编写 打开–g3 选项,去掉-O2以上级别的代码优化选项;否则编译器会对代码做一些优化,例如行合并,从而影响行覆盖率结果; 这里我比较懒就没有加 加到test目录下的CMakeLists.txt即可 , 其中代码编译完之后会在test/CMakeFiles/test.dir/ 生成test.cpp.gcno文件, 在运

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包