gtest代码库浅析
代码库工程概述
IDE:Visual Studio 2010
sln路径:gtest\msvc\gtest.sln
用IDE打开上面的sln,可以看到以下四个工程,算不上复杂。展开之后更是感觉这几个工程出奇地简单。

gtest工程
- 工程类型:静态链接库
- 要点:整个gtest代码库的文件数目较多,gtest采用了一种特殊的方式,把所有代码文件的引用都整合到了gtest-all.cc这一个文件里面,以下是代码片段:
// This line ensures that gtest.h can be compiled on its own, even
// when it's fused.
#include "gtest/gtest.h" // The following lines pull in the real gtest *.cc files.
#include "src/gtest.cc"
#include "src/gtest-death-test.cc"
#include "src/gtest-filepath.cc"
#include "src/gtest-port.cc"
#include "src/gtest-printers.cc"
#include "src/gtest-test-part.cc"
#include "src/gtest-typed-test.cc"
这种做法大大降低了引入gtest的操作成本。比如说要在一个工程中引入gtest,那我只需要显式地把gtest-all.cc加入到工程中,基本就达到目的了,这个过程我既不需要关心gtest里面各种文件是干什么的,也不需要关注哪些文件需要参与编译。详情可参考我写的另外一片文章《使用Visual Studio创建gtest工程》(链接:http://www.cnblogs.com/duxiuxing/p/4272343.html)。
gtest_main工程
- 工程类型:静态链接库
- 要点:gtest_main.cc里面是一个完整的main()函数。如果连写main()函数这一步都能省掉的话,基于gtest来建立测试工程的操作成本应该说是降低到了某一种极致的程度。 以下是gtest_main.cc的代码:
#include <stdio.h>
#include "gtest/gtest.h"
GTEST_API_ int main(int argc, char **argv) {
printf("Running main() from gtest_main.cc\n");
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
gtest_prod_test
- 工程类型:命令行程序
- 要点:这个是一个测试工程,被测试代码是一个叫做PrivateCode的类,工程演示的是如何使用gtest的FRIEND_TEST宏,在测试代码里面访问PrivateCode的private成员。整个工程包含以下要点:
- 静态链接了gtest_main,所以连main()函数都不用写了;
- 在这个工程中,单元测试是直接面向代码的,而不是面向被测试代码所编译出来的模块,测试代码和被测试代码是放在一个同工程里面进行编译的。
对于要点2,我们需要从以下两方面理解:
- 对于那些高内聚,低耦合的模块来说,这种思路则相当有重要。很多情况下,这类模块对外暴露的接口数量相当有限,如果仅针对这些接口来编写测试代码,效果不一定好,反倒是模块内部那些不曾对外暴露代码,更有被测试的价值。
- 如果被测试代码是地位如MFC这样的基础库,是不是这样做可能就关系不大了,因为对于一个基础库来说,绝大部分的代码往往在模块外也能访问得到。
gtest_unittest
- 工程类型:命令行程序
- 要点:用gtest测试gtest,我们可以把gtest_unittest.cc里面的代码当作今后自己写测试代码时候的首选范例。 其实除了这个文件之外,在以下两个文件夹下还能找到大量可以作为范例的测试代码:
- gtest\samples
- gtest\test
系列文章索引:http://www.cnblogs.com/duxiuxing/p/4270836.html
gtest代码库浅析的更多相关文章
- iOS流行的开源代码库
本文介绍一些流行的iOS的开源代码库 1.AFNetworking 更新频率高的轻量级的第三方网络库,基于NSURL和NSOperation,支持iOS和OSX.https://github.com/ ...
- 打造smali代码库辅助分析
打造smali代码库辅助分析 在分析Android应用程序的时候,我们往往会插入代码重打包apk来辅助我们分析的工作 一个比较取巧的方法就是先用java写好代码以及相关的调用之后, 然后直接扣出代码 ...
- Overview of the Oppia codebase(Oppia代码库总览)
Oppia is built with Google App Engine. Its backend is written in Python, and its frontend is written ...
- 我的github代码库
我的github代码库地址:https://github.com/gooree.Enjoy coding,enjoy sharing.
- 使用GitHub for Windows客户端管理京东代码库项目
1.下载并安装 GitHub for Windows 客户端 https://windows.github.com/ 2.在京东代码库中新的代码库,可以创建私有的代码库 https://code.jd ...
- git代码库误操作还原记录
先做一些前情提要: 我们项目使用git作为代码管理,同时为了操作更方便,安装了乌龟git(tortoiseGit)工具.以下几乎所有操作都是在乌龟git上进行. 我们的项目是分阶段完成的,在完成上一阶 ...
- 15分钟学会使用Git和远程代码库
git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...
- linux下搭建svn代码库
1.安装svn客户端 2.创建svn代码库 1.安装svn客户端 1.1.使用命令安装 1)CentOS $ yum install subversion 2)ubuntu sudo apt-get ...
- 针对远程Git代码库使用SSH公匙
→ 运行Git Bash→ 创建SSH公匙和私匙ssh-keygen -t rsa→ 输入SSH公匙存放文件,选择使用默认的,按Enter→ 如果已经存在,提示是否重写,输入n,按Enter→ 打开C ...
随机推荐
- 第一篇:数据工程师眼中的智能电网(Smart Grid)
前言 想必第一次接触到智能电网这个概念的人,尤其是互联网从业者,都会顾名思义的将之理解为"智能的电网". 然而智能电网中的"智能"是广义上的智能,它就是指更好的 ...
- [转] Java快速教程
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Java是面向对象语言.这门语言其实相当年轻,于1995年才出现,由Sun公司出品 ...
- iOS 10 个实用小技巧(总有你不知道的和你会用到的)
在开发过程中我们总会遇到各种各样的小问题,有些小问题并不是十分容易解决.在此我就总结一下,我在开发中遇到的各种小问题,以及我的解决方法.比较普遍的我就不再提了,这里主要讲一些你可能不知道的(当然,也有 ...
- Git和Github的应用与命令方法总结
title: Git和Github的应用与命令方法总结 date: 2016-07-11 14:03:09 tags: git/github [本文摘抄自微信公众平台:AndroidDeveloper ...
- codevs3008加工生产调度(Johnson算法)
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...
- NHibernate执行原生带sum的sql
可以自行查出想要的字段,并且返回的是model类型,可以点出所有的字段. 但是select 后面的字段名 必须有xml的字段名一模一样. ISession iSession = null; strin ...
- Java基础--IO
1,流的认识和分类 2,Java种处理流的IO类架构 3,字节流和字符流转换 4,NIO的概述 5,Java IO关闭资源 1,流的认识和分类 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的 ...
- 【COGS495】窗口
[问题描述] 给你一个长度为N的数组,一个长为K的滑动的窗体从最左移至最右端,你只能见到窗口的K个数,每次窗体向右移动一位,如下表: Window position Min value Max val ...
- ERROR:the server has either erred or is incapable of performing the requested operation
openstack中,有时会经常出现这种错误,原因无二,一是安全组没有设置正确,二是openstack中网络配置会有些问题或者是相关的服务没有启动. 解决方法:1.安全组问题在nova.conf和ne ...
- Apache 相关配置
1. HTTP缓存设置 ExpiresActive On #ExpiresDefault 设置全局缓存时间,将导致一些get请求不能连续执行 #ExpiresDefault "access ...