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 ...
随机推荐
- android中的数据库操作(转)
android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 an ...
- POJ 1655 Balancing Act&&POJ 3107 Godfather(树的重心)
树的重心的定义是: 一个点的所有子树中节点数最大的子树节点数最小. 这句话可能说起来比较绕,但是其实想想他的字面意思也就是找到最平衡的那个点. POJ 1655 题目大意: 直接给你一棵树,让你求树的 ...
- codevs 1213 解的个数(我去年打了个表 - -)
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int T,x ...
- 怎么在后台修改前台html页面的key、title、description
public void UpdateMeta(string title, string keyword, string desc) { ; i >= ; i--) { if (this.Head ...
- My.Ioc 代码示例——属性和方法注入
在 My.Ioc 中,我们可以指定让容器在构建好对象实例之后,自动为我们调用对象的公共方法或是为对象的公共属性赋值.在解析对象实例时,容器将根据我们在注册对象时指定的方法调用或属性赋值的先后顺序,调用 ...
- knockoutjs关键点
<p>Your value: <input data-bind="value: someValue, valueUpdate: 'afterkeydown'"/& ...
- 注册表修改IP地址和DNS等信息
---------------------win8系统 1. 2. 3. --------------------------------------------------------------- ...
- Oracle11G安装
1.安装Oracle 记住要设置好密码 不要忘了 解锁scott(注意一定要解锁)账户, 去掉前面的绿色小勾,输入密码.同样可以输入平常用的短小的密码,不必非得按oracle建议的8位以上大小写加数字 ...
- iOS真机测试种可能遇到的问题
1. Reason- image not found 用模拟器是没有问题的,不过在真机好像是有问题,不确定是否是所有机型. 崩溃日志 1 2 3 4 5 dyld: Library not l ...
- NPM环境搭建
1. NPM全局路径:配置npm包的安装位置,在你的用户文件夹下,新建.npmrc文件:cache=D:\NodeJs\nvm\npm-cache 表示缓存文件夹 prefix=D:\NodeJs\n ...