gtest是Google开发的一个开源单元测试框架,代码提供丰富的注释和实例,参考实际用例可以很快上手基本单元测试,丰富的代码注释能够让有兴趣的开发者深入了解gtest的代码结构并做部分针对性的二次开发。gtest主要针对c/c++提供了针对函数接口和类方法丰富测试方法,针对单元测试特有的数据或者代码反复编写的这种特性做了集成和优化,满足当前绝大部分对于单元测试的需求。其有如下特点:
结合如上的特点,gtest涉及知识主要是断言、参数化、夹具、死亡测试、监听这么几个点。本章主要讲解gtest的编译和基本实例执行。
gtest在GitHub上是开源项目,可以直接clone或者下载软件包。
git clone https://gitee.com/mirrors/googletest.git
cd googletest-main
mkdir build
cd build
cmake ..
make
编译以后的静态库在build/lib下面,共四个静态库文件。
创建测试用例目录utest,里面包含了gtest的源码和编译结果库文件。在测试中建立include、lib两个目录分别用来存放gtest对外提供的头文件和编译出来的库文件。注意include和lib下面的gtest子目录是最终实际保存头文件或者库的最终内容。
book@100ask:~/utest$ tree
.
├── a.out
├── googletest-main
├── gtest.cpp
├── include
│ └── gtest
└── lib
└── gtest
目录建立成功以后,通过如下命令将gtest中结果拷贝到需要编译的架构中:
cp gtest1110/build/lib/*.a lib/gtest/
cp -r gtest1110/googletest/include/gtest/ include/
建立测试文件gtest.cpp,代码内容如下
#include<gtest/gtest.h>
using namespace testing;
int add(int a,int b){
return a+b;
}
TEST(testCase,test0){
EXPECT_EQ(add(2, 3), 5); // 正确
EXPECT_EQ(add(2, 3), 4); // 错误
}
int main(int argc,char **argv){
InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
}
通过如下命令将代码和库文件编译成一个可执行文件进行测试
g++ gtest.cpp -L lib/gtest -I include -lgtest -pthread
测试执行结果如下:
book@100ask:~/utest$ ./a.out
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from testCase
[ RUN ] testCase.test0
gtest.cpp:9: Failure
Expected equality of these values:
add(2, 3)
Which is: 5
4
[ FAILED ] testCase.test0 (0 ms)
[----------] 1 test from testCase (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[ PASSED ] 0 tests.
[ FAILED ] 1 test, listed below:
[ FAILED ] testCase.test0
1 FAILED TEST
测试用例编写需要包含gtest.h头文件,文件中包含了核心的对外测试接口。
gtest代码中包含了一些简单的测试用例,比方说sample_unitest.c中如下这一段
// Tests factorial of positive numbers.
TEST(FactorialTest, Positive) {
EXPECT_EQ(1, Factorial(1));
EXPECT_EQ(2, Factorial(2));
EXPECT_EQ(6, Factorial(3));
EXPECT_EQ(40320, Factorial(8));
}
这一段给定了一个case基本的结构, TEST宏两个参数官方解释为:[TestCaseName,TestName],而我对这两个参数的定义是:[TestSuiteName,TestCaseName],在下一篇我们再来看为什么这样定义。
对检查点的检查,我们上面使用到了EXPECT_EQ这个宏,这个宏用来比较两个数字是否相等。Google还包装了一系列EXPECT_* 和ASSERT_*的宏,而EXPECT系列和ASSERT系列的区别是:
另外,测试一个case中测试的前后顺序是有讲究的,前面的顺序要首先满足然后依次推进。也就是前面一个测试用例是后面一个测试用例成立的必要不充分条件。
测试运行主要包含两个核心内容,main函数中开始部分使用中可以根据自己情况编写部分定制的初始化代码或者过滤代码。之后调用gtest初始化函数,然后调用执行接口即可完成整个执行过程。执行结束以后可能需要用户自己编写部分代码针对自己特定的需求完成部分定制的结果解析。这里面最基本的两个单元如下:
前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型
Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法,Linux…感兴趣就关注我吧!你定不会失望。目录1.ls显示当前目录下的文件内内容2.pwd-显示用户当前所在的目录3.cd-改变工作目录。将当前工作目录改变到指定的目录下1.cd-回到上一次待的工作空间2.cd..返回上一层目录1.相对路径:cd../aurora2.绝对路径:cd/home/aurora/lesson1/aurora3.cd~进入用户家目录4.cd/进入root目录4.mkdir-新建目录5.rmdir/rm-删除1.rmdir删除空文件夹2.rm删除1.rm-f2.rm-i3.rm-r1.ls显示当前目
gtest是Google开发的一个开源单元测试框架,代码提供丰富的注释和实例,参考实际用例可以很快上手基本单元测试,丰富的代码注释能够让有兴趣的开发者深入了解gtest的代码结构并做部分针对性的二次开发。gtest主要针对c/c++提供了针对函数接口和类方法丰富测试方法,针对单元测试特有的数据或者代码反复编写的这种特性做了集成和优化,满足当前绝大部分对于单元测试的需求。其有如下特点:自动收集测试用例,无需开发者再次组织提供强大的断言集,支持包括布尔、整型、浮点型、字符串等。提供断言方法自定义扩展提供死亡测试功能使用参数化自动生成多个相似的测试用例可以将公共的用例初始化和清理工作放入测试夹具中,
一鸿蒙简介HarmonyOS是一款面向万物互联时代的、全新的分布式操作系统。在传统的单设备系统能力基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备,提供全场景(移动办公、运动健康、社交通信、媒体娱乐等)业务能力。HarmonyOS提供了支持多种开发语言的API,供开发者进行应用开发。支持的开发语言包括Java、XML(ExtensibleMarkupLanguage)、C/C++、JS(JavaScript)、CSS(CascadingStyleSheets)和HML(HarmonyOSMarkupLan
前言在进入软件测试的正式讲解之前,我们需要对这个行业有一个整体的了解。当我们从软件开发转向软件测试的时候,多数公司是欢迎的,而且难度也小。反之,当我们从软件测试转向软件开发的时候,难度将会变得很大。关于互联网的工作大概有以下三种:1、软件开发:进行软件系统的开发,功能实现的工作2、软件测试验证软件功能性的正确性。具体的验证方式分为以下几种:1、手工验证2、自动化验证3、软件测试与开发开发测试工具,开发测试脚本,其目的就是为了提高测试效率。看到开发这两个字,说明是会涉及到编程的。但是难度会比软件开发低一些,没有数据结构中的编程那么难。测试开发这里的编程,都是有着指定规则来编写代码。换句话来说,它
文章目录BACnet协议架构BACnet简化的架构简化的四层BACnet体系结构选取BACnet网络的拓扑结构安全最后声明BACnet协议架构国际标准化组织在制定计算机网络通讯协议标准时定义了一个模型,称为开放系统互联参考模型(OSI(ISO7498)。模型的目的是解决计算机与计算机之间普遍的通信问题。下图给出了这七层的体系架构图。对于这种发生在两个应用程序之间的通信,看起来两个程序似乎是通过各自的应用接口直接相连。而真正的通信只发生在物理层。实现OSI模型协议所需的费用较高,在绝大部分楼宇自动控制系统中,并不需要实现OSI模型的所有内容。如果只选择OSI模型中需要的层次,形成一个简化的模型,
目录webpackwebpack的基本使用安装配置修改自定义打包的入口与出口优化js或图片的存放路径配置webpack中@符号的使用webpack中相关插件安装webpack-dev-serverhtml-webpack-pluginclean-webpack-pluginwebpack中的loader打包处理css文件打包处理less文件打包处理样式表中与url路径相关的文件打包处理js文件中的高级语法webpack的打包与发布配置build命令SourceMapwebpackwebpack是前端项目工程化的具体解决方案。其主要功能为:它提供了友好的前端模块化开发支持,以及代码压缩混淆,处理
有一个专为linux环境开发的项目。现在我正在尝试使用CMake在Windows上构建它。我一直在尝试构建项目,但总是出现此错误:CMakeErroratC:/ProgramFiles(x86)/CMake/share/cmake-3.3/Modules/FindPackageHandleStandardArgs.cmake:148(message):CouldNOTfindGTest(missing:GTEST_LIBRARYGTEST_INCLUDE_DIRGTEST_MAIN_LIBRARY)CallStack(mostrecentcallfirst):C:/ProgramFil
出于某种原因,GTest在我的开发站上表现不佳。某些ASSERT/EXPECT测试正在运行,但我无法让字符串比较正常运行。这就是代码在CLion中的样子;注意错误弹出窗口:底部还附上了编译时的错误输出。由于我在Windows10上使用JetBrainsCLion,因此必须使用“MinGWMakefiles”CMake生成器构建GTest,然后使用MinGWmake(而不是CMake默认的VisualStudio生成器)。此外,我能找到的唯一可用资源是最新的GithubGTestmaster分支;其2016年11月的最新版本将不会在MinGW的Windows上构建。Infileinclu
作者简介:一名C站萌新,前来进行小程序的前进之路博主主页:大熊李子的主页🐻1.1什么是微信小程序微信小程序是一种可以通过扫码或搜索即可进入使用的应用,减少了下载安装的环节,实现用户对于应用“触手可及、用完即走”的理想需求。在微信公众平台,小程序是与服务号、订阅号、企业微信并行的体系点开微信“发现-小程序”栏,你就能看到近期使用过的小程序;或者下拉微信聊天页面,你也能看到自己用过的小程序。如果你没有用过任何小程序,那么可以扫码进入小程序页面,或者点击好友分享的小程序卡片进入小程序。1.2小程序与普通网页开发的区别1.运行环境不同网页运行在浏览器环境中小程序运行在微信环境中2.API不同由于运行环