gtest单元测试

news2024/11/27 2:23:36

gtest单元测试

  • 1. gtest是什么?简答:做测试用的
  • 2. gtest的优点
  • 3. 搭建测试框架
  • 4. 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

第一步搞定:!
在这里插入图片描述

第二步:

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 …成功!
在这里插入图片描述
第六步:

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

你猜一猜怎么着?成功了!居然是虚拟机问题!
在这里插入图片描述

历史的教训告诉我们,被高兴的太早!
上面成功之后,你还需要尝试一下 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环境才算正式搭建成功!
在这里插入图片描述

4. gtest_范例演示

代码放在我的代码仓库了,大家可以去去demo文件中查看,写的很详细!
代码地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/573445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaSE】Java基础语法(十四):Static

文章目录 概述特点与应用注意事项为什么一个静态方法中只能访问用static修饰的成员? 概述 Java中的static是一个修饰符(也可称关键字),可以用于修饰变量、方法和代码块。 特点与应用 static修饰的成员具有以下特点: 被类的所有对…

如何在Mac上抓取安卓设备的日志

要在 Mac 上抓取 Android 设备的日志,您可以使用 Android SDK 中的 adb 工具。以下是一个简单的步骤: 1.您需要在 Mac 上安装 Android SDK。您可以从 Android 开发者网站上下载最新版本的 Android SDK,并按照说明进行安装。 2.将您的 Andro…

重学 Symbol

重学 Symbol 之前在写基础类型的笔记时暂时性的先跳过了 symbol,现在也有了一些项目的使用经验后,觉得还是需要重新回滚并且学习一下,温故而知新。 首先依旧回顾一下 symbol 的特点: 是原始值 唯一 不可变 可以提供私有属性&…

javaWeb ssh沙发销售系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh沙发销售系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Mye…

【SUMO】SUMO运行自带的OSM入门教程

文章目录 一、运行CMD命令行二、进入OSM选择地图位置 首先给出官网教程: https://sumo.dlr.de/docs/Tutorials/OSMWebWizard.html 一、运行CMD命令行 代码: 先进入osmWebWizard.py文件地址 cd /d D:\SUMO\sumo-1.17.0\tools(替换成自己的…

智慧PG(pgting),一款拖拽式智能页面搭建系统

目录 前言 一、介绍 二、设计理念 1,资源整合,开箱即用 2,降低系统颗粒度 3,组件共享 4,简化配置 三、系统功能 1,可视化大屏搭建: 四、技术架构 1,技术栈 2,整体架构 五…

LeetCode 1091. Shortest Path in Binary Matrix【BFS,A星】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

C++ 代码整洁之道

NOTICE: 这篇文章的框架条目来自《C代码整洁之道:C17可持续软件开发模式实践》,作者: [德] 斯提芬罗特。书籍原名"Clean C: Sustainable Software Development Patterns and Best Practices with C 17"。 文章目录 编码基本原则保持简单和直接…

Unity | HDRP高清渲染管线学习笔记:示例场景解析

目录 一、HDRP入门 1.HDRP设置 1.1 HDRP配置文件中的全部设置项 1.1.1 Rendering下的Lit Shader Mode 1.1.2 Lighting 下的Volumetrics(体积光)和Screen Space Reflection(屏幕空间反射) 2.离线渲染VS实时渲染 3.Volume组件 …

文字gif闪图怎么做?高效的gif闪图制作方法

相信不少新媒体行业的小伙伴,一定都见过那种闪动文字效果的gif动图吧。效果非常的炫酷还很吸引人们的眼球,但是作为设计小白这种闪烁gif图要怎么制作呢?有没有那种小白也能轻松上手的工具呢? 一、什么样的工具能够在线生成gif动态…

《Spring Guides系列学习》guide35 - guide40

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

项目管理自动化 工作效率顶呱呱

项目管理,是职场人进阶发展的必备高阶能力,需要在复杂的环境中有效整合资源、高效助力团队实现整体的项目目标。 一个好的项目管理者,需要合理规划项目进展,实时同步需求、及时沟通进展,合理判断项目风险&预警&am…

记一次用户反馈app在后台收不到push问题跟踪

我们的应该大范围推广后,今日用户群好多用户反馈安卓手机app在后台时收不到app的push消息,只有app处于前台时才能收到push消息。但是ios手机可以正常接收push消息。 拿到问题,首先想到从下面几个方便尝试定位: 1.用户手机app通知权…

财报解读:毛利持续改善,金山云正在“弯道超车”?

一季度,云巨头们的表现持续稳健,依旧稳坐前排,而作为中小云代表的金山云也在5月23日发布了2023年一季度财报,盈利能力持续改善成为通篇最亮眼的一笔。 随着AI大模型打开了新的“潘多拉魔盒”,云市场也在发生着巨变。 …

picoctf_2018_rop chain

小白垃圾笔记,不建议阅读。 这道题目其实我是瞎做的. 本地调试需要写一个文件名为flag.txt的文件。 先检查下保护:(我把文件名改成pwn了),32位仅仅开启了nx 然后放到32位ida里: main函数如下&#xff1a…

〖Web全栈开发⑤〗— CSS基础

〖Web全栈开发⑤〗— CSS基础 (一)CSS基础1.1CSS介绍1.2CSS样式1.3CSS 格式 (二)CSS 选择器2.1标签选择器2.2类选择器2.3层级选择器2.4id选择器2.5组选择器2.6伪类选择器2.7通配符选择器 (三)样式表引入3.1外部样式表3.2内部样式表…

WPF入门实例 WPF完整例子 WPF DEMO WPF学习完整例子 WPF实战例子 WPF sql实例应用

WPF 和 WinForms 都是用于创建 Windows 桌面应用程序的开发框架,它们有一些相似之处,但也有很多不同之处。 在开发速度方面,这取决于具体情况。如果您熟悉 WinForms 开发并且正在开发简单的界面应用程序,则可能会比使用 WPF 更快…

《Spring Guides系列学习》guide41 - guide45

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

kaggle官方书籍推荐:The-Kaggle-Book

今天介绍一本kaggle出版的竞赛书籍。 这本书结合真实的kaggle竞赛题目,以及它们的冠军团队方案,介绍了参与机器学习竞赛的一些基础知识、经验技巧等。 内容涵盖Kaggle的介绍、建模问题以及技巧、如何利用Kaggle的经历来丰富简历等等。 书籍简介 参加 …

银河麒麟v4.0.2安装

银河麒麟v4.0.2安装 一、下载银河麒麟系统二、制作USB的启动镜像三、安装银河麒麟系统1、设置要被安装的机器bios启动模式为USB启动后,选择第一项:图形安装银河麒麟服务器操作系统2、设置用户和密码,右下角有继续,点击继续下一步3…