在对输出结果进行检查(check)时,Gtest为我提供了一系列的断言(assertion)来进行代码测试,这些宏有点类似于函数调用。 当断言失败时Gtest将会打印出assertion时的源文件和出错行的位置,以及附加的失败信息。这些输出的附加信息用户可以直接通过“<<”在这些断言宏后面。 Gtest中,断言的宏可以理解为分为两类,一类是ASSERT系列,一类是EXPECT系列。 因为GTest源码中需要使用下划线把它们连接成一个独立的类名 这样也就要求,我们不能有相同的“测试套件名和特例名”的组合——否则类名重合。 预处理事件机制 gtest 提供了多种预处理事件机制,非常方便我们在测试之前或之后做一些操作。 1. 全局的,所有测试执行前后。 2.
name=gtest-1.7.0.zip&can=2&q=下载最新的gtest-1.7.0版本 在Windows下编译gtest步骤: (1)、将gtest-1.7.0.zip进行解压缩; (2)、用vs2010 打开msvc目录下的gtest.sln工程,需要进行转换,生成gtest、gtest_main、gtest_prod_test、gtest_unittest四个工程; (3)、分别在Debug和Release 下,选中Solution ‘gtest’,点击右键,执行Rebuild Solution,会在msvc/gtest/Debug下生成gtestd.lib、gtest_maind.lib库,在msvc/gtest 在Ubuntu下编译gtest步骤: 在gtest-1.7.0.zip目录下,依次执行: unzip gtest-1.7.0.zip; cd gtest-1.7.0; . 文件夹下,输入命令:python fuse_gtest_files.py fused_gtest ;会在/scripts文件夹下生成一个fused_gtest/gtest文件,里面包含gtest.h和
/src/gtest_main.cc ar rv gtest_main.a gtest-all.o gtest_main.o ar: creating gtest_main.a a – GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \ $(GTEST_DIR)/include/gtest/internal/*.h # House-keeping : $(GTEST_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ $(GTEST_DIR)/src/gtest-all.cc gtest_main.o : $(GTEST_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ $(GTEST_DIR)/src/gtest_main.cc gtest.a /src/gtest_main.cc ar rv gtest_main.a gtest-all.o gtest_main.o ar: creating gtest_main.a a – gtest-all.o
###GoogleTest在Ubuntu下的安装及编译: 安装: sudo apt-get install libgtest-dev cd /usr/src/gtest sudo cmake . sudo See comments in include/gtest/internal/gtest-port.h for more information. :列出所有测试名称 --gtest_filter:过滤器,仅运行全名与过滤器匹配的测试,格式为以”:“分隔的列表,可以在最后加一个”-“和”:”分隔的列表,表示负模式,*匹配任何字符串,? --gtest_also_run_disabled_tests:执行被禁用的测试 --gtest_repeat=num:重复所有测试方法num次 --gtest_shuffle:洗牌测试 --gtest_output 设置为shard总数,所有shard上该设置相同,同时每一个shard上GTEST_SHARD_INDEX设置为索引,所有shard不同,且必须在0-(GTEST_TOTAL_SHARDS-1)范围内,
2.创建连接库 生成gtest-all.o : g++ -isystem gtest/include -I. /gtest/src/gtest-all.cc 生成gmock-all.o : g++ -isystem gtest/include -I./gtest -isystem . /local目录 将gmock-1.7.0/gtest/include下面的gtest目录拷贝到/usr/local/include下 cp gmock-1.7.0/gtest/include/gtest /samples/sample1_unittest.cc /usr/src/gtest/src/gtest_main.cc /usr/src/gtest/src/gtest-all.cc -I/usr 与CxxUnit比,gtest不要求Python等外部工具的存在。与Boost.Test比,gtest更简洁容易上手,实用性也并不逊色。
文件 因为我的VS是2017版,下载的gtest对应的是2010版,所以打开会提示选择目标SDK版本和升级平台工具集,点确定即可。 先在debug模式下编译gtest,直接编译会提示找不到SDK 8.1版本: ? 按提示选择“重定项目目标”: ? 完成后编译就能成功了: ? ? 相同的步骤,再编译gtest_main工程,再切换为release模式,编译gtest和gtest_main,? \msvc\2010\gtest\Win32-Release文件夹会产生两个.lib文件: 把编译得到的gtest.lib,gtestd.lib,? gtest_main.lib,?gtest_maind.lib 都放到gtest根目录的lib文件夹下(lib和include位于同一级,如果没有就新建一个lib文件夹)。
目录 1.编译及学习资料 1.1编译gtest 1.2学习文档及资料 2.gtest总结 2.1gtest中的术语 2.2断言 2.2.1基本断言 2.2.2Binary Comparison 浮点数比较 2.12自定义设置可接受的范围 2.13gMock Matchers 2.14类型断言(type assertions) 2.15Death Test ---- 1.编译及学习资料 1.1编译gtest 与 gtest_maind.lib/gtest_main.lib的区别? https://stackoverflow.com/questions/6457856/whats-the-difference-between-gtest-lib-and-gtest-main-lib /gtest_maind.lib gtest进阶(Advanced googletest Topics) https://github.com/google/googletest/blob/master
DISABLED_ 前缀 –gtest_repeat=[COUNT] ::testing::FLAGS_gtest_repeat(int32_t) 设置案例重复运行次数–gtest_repeat=-1 无限次数执行–gtest_repeat=1000 –gtest_break_on_failure 重复执行1000次,并且在第一个错误发生时立即停止–gtest_repeat=1000 –gtest_filter =FooBar 重复执行1000次测试案例名称为FooBar的案例 –gtest_shuffle ::testing::FLAGS_gtest_shuffle(bool) 随机运行测试 –gtest_random_seed FLAGS_gtest_color(std::string) 是否输出颜色,有三种选项,“yes”, “no”,“auto” –gtest_brief=1 ::testing::FLAGS_gtest_brief json或xml文件中–gtest_output=xml: 不指定输出路径时,默认为案例当前路径–gtest_output=xml:d:\ 指定输出到某个目录–gtest_output=xml:d:\foo.xml
gtest初识总结 本文以结合gtest github内容进行学习gtest。 gtest github地址 gtest编译 g++ xx.cpp xx.h -lgtest -lpthread -o main gtest编写 创建测试的一个简易的步骤: 1.使用TEST() _H_ #define GTEST_SAMPLES_SAMPLE1_H_ // Returns n! return true; } sample1_unittest.cc #include <limits.h> #include "sample1.h" #include "gtest/gtest.h" /gtest.h> using namespace std; GTEST_API_ int main(int argc, char **argv) { printf("Running main
使用 cmake 启动并运行 gtest 1. 举例来说,在 my_project 目录中创建一个名为 hello_test.cc 的文件: vim hello_test.cc 内容如下: #include <gtest/gtest.h> // ::gtest_main ) # 包含 GoogleTest 模块 include(GoogleTest) # 使用 gtest_discover_tests 函数来自动发现并添加测试 gtest_discover_tests 1. gtest 入门 使用 gtest 时,首先要会编写断言(assertions),这些是检查条件是否为真的语句。 当一个断言失败时,gtest 会打印断言的源文件和行号位置,以及一个失败消息。你还可以提供一个自定义的失败消息,它将附加到 gtest 的消息中。
来源:http://www.uml.org.cn 一、什仫是gtest gtest是一个跨平台的(Liunx、Mac OS X、Windows 、Cygwin 、Windows CE and Symbian gtest是为在不同平台上为编写C++测试而生成的。它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。 了解了什仫是gtest之后下面让我们来学习gtest的一些使用规则吧! 二、gtest系列之断言 gtest中断言的宏可以分为两类:一类是ASSERT宏,另一类就是EXPECT宏了。 #include<iostream>using namespace std; #include<gtest/gtest.h> int Abs(int x){return x > 0 ? 五、一个关于gtest的简单例子 #include<iostream>using namespace std;#include<gtest/gtest.h> struct LinkNode{int _data
准备gtest框架 在github网站下载gtest框架 https://github.com/google/googletest 解压后,进入googletest目录。 文件: g++ -o gtest.o -I. /src/gtest-all.cc 再生成.a静态库文件: ar -rv libgtest.a gtest.o 生成的libgtest.a以及该目录include下的头文件都是我们后面测试需要的, 同时,在该目录下创建以下三个目录 ├── gtest //存放gtest框架内容 ├── leetcode //存放项目源代码 ├── testcase /gtest.h" 编译链接 测试之前,需要编译并链接我们得项目代码和测试框架。
来源:http://www.uml.org.cn 安装GTest 1、安装源代码 下载gtest,release-1.8.0 git clone https://github.com/google/googletest 可以写一个简单的测试代码如下: #include<gtest/gtest.h>int add(int a,int b){return a+b;}TEST(testCase,test0){EXPECT_EQ GTest的断言 1、布尔值检查 ? 2、数值型数据检查 ? 3、字符串比较 ? 4、异常检查 ? 5、浮点型检查 ? 对相近的两个数比较: ? TearDown()方法在每个TestCase之后执行 以下案例解决说明上述三个事件的使用 #include<gtest/gtest.h> #include<map> #include<iostream (官方文档上的案例) #include<gtest/gtest.h> // Returns true iff n is a prime number. bool IsPrime(int n) { //
gtest下载与安装 https://github.com/google/googletest git clone https://github.com/google/googletest.git cd googletest mkdir build cmake .. make sudo make install 以上命令会将gtest编译好,并将静态链接库放在/usr/local/lib 目录下 的动态链接库,在编写gtest的时候只需要链接这些文件就可以使用gtest。 检查是否安装成功 可以写一个简单的测试代码如下: #include<gtest/gtest.h> int add(int a,int b){ return a+b; } TEST(testCase /gtest.h> int main(mai nint argc, char **argv) { printf("Running main() from gtest_main.cc\n");
一、什仫是gtest gtest是一个跨平台的(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)C++单元测试框架,由google公司发布。 gtest是为在不同平台上为编写C++测试而生成的。它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。 了解了什仫是gtest之后下面让我们来学习gtest的一些使用规则吧! ---- 二、gtest系列之断言 gtest中断言的宏可以分为两类:一类是ASSERT宏,另一类就是EXPECT宏了。 #include<iostream> using namespace std; #include<gtest/gtest.h> int Abs(int x) { return x > 0 ? 五、一个关于gtest的简单例子 #include<iostream> using namespace std; #include<gtest/gtest.h> struct LinkNode { int
DCMAKE_MAKE_PROGRAM=make指定gcc、g++与make 2、测试私有成员函数出现__xfer_bufptrs redeclared with different access 添加以下代码,注意==不要包含gtest /gtest.h头文件==,若多包含可能会出现struct std::__cxx11::basic_stringbuf<_CharT, _Traits, _Alloc>::__xfer_bufptrs' object file directory C:/Users/xxx/Desktop/WR/code/xxx/test/test_xxxx.cpp/ test_xxxx/build/CMakeFiles/gtest_xxxx.dir 可能是由于你的名字取的太长了,导致不能完整放下,后面在make时会出现错误 fatal error: opening dependency file CMakeFiles\gtest_xxx.dir\C of main错误 多次定义main函数导致的,如在CmakeLists.txt中调用了libgtest_main.a动态库,而在其他cpp文件中也出现了main函数,就会导致两次定义; 若想自己定义gtest
前言 Google mock(以下简称gmock)和Google Test(以下简称gtest)是google的开源项目,他能够在测试中起到“打桩”的作用。 举个例子,有A模块需要调用B模块,需要对A模块进行测试,但是B模块没有实现,那么就可以利用gmock和gtest对B模块进行打桩测试,来模拟B接口的实现测试A接口。 本文主要介绍gmock和gtest在linux中的环境搭建。 准备gtest框架 (1) 获取gtest框架 命令行模式下输入: git clone https://github.com/google/googletest 进入googletest目录,目录有以下内容 可以看到,共有两个用例,通过了两个用例例子中,暂时未使用到gmock,只介绍了gmock和gtest的环境搭建,gmock的具体用法不在此展开。
简介 总结gtest中的所有断言相关的宏。 gtest中,断言的宏可以理解为分为两类,一类是ASSERT系列,一类是EXPECT系列。
新博客链接 gtest 提供了一套优秀的 C++ 单元测试解决方案,简单易用,功能完善,非常适合在项目中使用以保证代码质量。 安装 官方传送门:googletest 现在官方已经把 gtest 和 gmock 一起维护,所以这个 git 仓库还包含了 gmock。 检查,看到下面就 OK 了: libgtest.so -> libgtest.so libgtest_main.so -> libgtest_main.so 使用 官方 WIKI:Gtest 断言 gtest sample1 #include <limits.h> #include "sample1.h" #include "gtest/gtest.h" // Tests factorial of negative #include "sample3-inl.h" #include "gtest/gtest.h" // To use a test fixture, derive a class from testing
gtest需要安装有时候带来很多不方便。网络原因,下载安装gtest或者git上拉gtest都可能因为网络原因失败。除了gtest之外,还有很多轻量级易用的单元测试库,比如doctest。 现代C++ unit-test库 除了gtest之外,还有很多轻量级易用的单元测试库,比如doctest和catch。 相比gtest需要编译/安装,他们都是header only的,直接包含到工程里就可以做单元测试了,portable又没有任何依赖,而且对编译器版本要求也不高,只需要C++11就行了,用了之后只有一个字 这里推荐使用doctest,原因是它的性能比catch更好,当然也比gtest好, 来看看doctest怎么用的吧。 doctest的断言宏 CHECK宏是只检查并不会终止测试,REQUIRE宏则会终止测试和gtest里面的ASSET_XX宏类似,这两个宏也是平时做单测时用得最多的两个宏了。