[C++]在Visual Studio 2010中使用Google Test - 配置

我主要是想使用单元测试,VS2010是有自己的单元测试的,虽然我不抵触Microsoft的东西,但是自己做的非工业级的东西,去用Microsoft的解决方案是找罪受~所以使用了Google的测试方案。主要查阅了国外的一篇资料,虽然那位写得实在简略,但写得还是不错的,我补充梳理了一下。

下载部署GTest

首先去下载Google Test,网址为http://code.google.com/p/googletest/。我写此文的时候是1.6版。
解压之,因为要反复使用,所以最好放到固定的目录。我解压到了D:\Selah\VSProjects\Source下。打开解压后的目录,结构如下:

其中要接触的目录有:

../ - 即D:\Selah\VSProjects\Source\gtest-1.6.0,我把它设置为$(GTest),这样就不用每次写一长串路径了。
include - 包含目录,里边有头文件,测试时要用到。
msvc - Visual Studio的项目工程文件,已经配置好了的,用它生成二进制库。

运行msvc下的gtest.sln文件,它会提示自动升级为新的解决方案,然后生成即可。记得Debug和Release都要生成,分别用于测试Debug和Release方案的代码。我使用的是以下4个文件,还可以使用另外一个.sln文件,请自行文档之~

msvc\gtest\Debug - Debug方案下的二进制文件:gtestd.libgtest_maind.lib(注意主文件名的d后缀)
msvc\gtest\Release - Release方案下的二进制文件:gtest.libgtest_main.lib

Solution配置

为了让测试和程序运行互不干扰,老外将待测试模块和程序入口分离为两个项目,这样程序和GTest都可以访问待测试模块,互不冲突。最简单的情况下,Solution下有3个Project:

BaseCode - 待测试模块。我是要做单元测试的,所以头文件里要包含信息。(比如你要测试void Foo(),起码要在头文件里Declare一下吧~)
RunBaseCode - 程序入口。就是将程序一分为二为两部分。程序入口调用BaseCode生成的模块,实现程序功能。
TestBaseCode - 测试程序。这个是书写GTest测试用例的Project。除了要调用BaseCode生成的模块(否则你测试个毛线啊)。并且,他还要调用GTest的模块(否则你用毛线测试啊)。

另外就是路径问题,为了简便,我把路径写成了宏。宏保存在项目属性表里,这个表除了可以保存宏,还能保存后边提到的路径,可以备份了下次直接用。

具体过程不说了,这图一看就懂吧,之后就可以使用$(GTest)代替那长串路径了。

 

Project - BaseCode配置

Debug/Release通用:

项目属性 - 配置属性 - 常规: 配置类型 = 静态库(.lib)。你也可以用动态库,不过要或重新编译GTest,具体文档之~静态库很好的,不要看不起他。

Debug:

项目属性 - 配置属性 - C/C++ - 代码生成: 运行库 = 多线程调试(/MTd)。如果不这么做,结果就是报错~

Release:

项目属性 - 配置属性 - C/C++ - 代码生成: 运行库 = 多线程(/MT)。如果不这么做,结果就是报错~

 

Project - RunBaseCode配置:

因为要调用BaseCode的lib,所以配置一下项目依赖项(依赖BaseCode)。要不然,BaseCode还没生成呢,就开始生成RunBaseCode,结果只能是报错。

Debug/Release通用:

项目属性 - 通用属性 - 框架和引用: 添加对BaseCode的引用。感觉和.Net的程序集引用有点像。如果不这么干(比如对此有很深的厌恶之情),可以配置附加库路径以及附加依赖项(配置TestBaseCode时有介绍)。

项目属性 - 配置属性 - C/C++ - 常规: 附加包含目录 += $(SolutionDir)\BaseCode。其实是可有可无,如果设置了,引用头文件可以使用:

#include <BaseCode.h>

否则,就只能使用相对或者绝对路径了:

#include "../BaseCode/BaseCode.h

Project - TestBaseCode配置

除了和RunBaseCode相同的配置外(因为它也要调用BaseCode.lib,重复工作我不写了),还要进行如下配置。

Debug/Release通用:

项目属性 - 配置属性 - C/C++ - 常规: 附加包含目录 += $(GTest)\include。这样方便包含GTest的头文件。
项目属性 - 配置属性 - 连接器 - 常规: 附加库目录 += $(GTest)\msvc\gtest\$(IntDir)。如果之前没有引用BaseCode,要在这里做类似设置。

Debug:

项目属性 - 配置属性 - C/C++ - 代码生成: 运行库 = 多线程调试(/MTd)。如果不这么做,结果就是报错~(和BaseCode的设置相同)
项目属性 - 配置属性 - 连接器 - 常规: 附加依赖项 += gtestd.lib;gtest_maind.lib。如果之前没有引用BaseCode,要在这里做类似设置。

Release:

项目属性 - 配置属性 - C/C++ - 代码生成: 运行库 = 多线程(/MT)。如果不这么做,结果就是报错~(和BaseCode的设置相同)
项目属性 - 配置属性 - 连接器 - 常规: 附加依赖项 += gtest.lib;gtest_main.lib

生成即测试

老外果然有思路。这样配置了TestBaseCode,就不用执行它了,每次生成解决方案,就会自动执行测试。

项目属性 - 配置属性 - 生成事件 - 后期生成事件: 命令行 = $(TargetDir)$(TargetFileName)。效果:

如果执行测试的exe文件,会一闪而过,可以放到cmd里边执行。效果还是不错的。Over~~

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

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

相关文章

为什么传值时加号变成了空格_URL的参数中有加号传值变为空格的问题(URL特殊字符)...

1.URL特殊字符需转义2.空格换成加号()3.正斜杠(/)分隔目录和子目录4.问号(?)分隔URL和查询5.百分号(%)制定特殊字符6.#号指定书签7.&号分隔参数转义字符的原因&#xff1a;如果你的表单使用get方法提交&#xff0c;并且提交的参数中有“&”等特殊符的话&#xff0c;如…

LeetCode--single-number复杂度

1、题目 给定一个整数数组&#xff0c;每个元素都出现了两次&#xff0c;但有一个只出现了一次&#xff0c;请找出这个数。 Note&#xff1a;算法要求有线性时间复杂度&#xff0c;并且不占用额外的空间。 2、解法&#xff1a; public class Solution {public int singleNu…

Flask总结

Flask的优缺点 优点&#xff1a;Flask小而精&#xff0c;三方组件全 缺点&#xff1a;稳定性相对较差&#xff0c;三方组件版本问题&#xff0c;Flask一旦迭代&#xff0c;就可能造成三方组件不兼容的问题。 flask三剑客 小儿子 Django flask HTTPRespon…

交流设计

软件设计至关重要。 它是应用程序的基础。 就像一个蓝图&#xff0c;它为来自不同背景的聚会提供了一个通用平台。 它有助于理解&#xff0c;协作和发展。 设计不应仅视为开发的要素。 它不应该只存在于开发人员的头脑中&#xff0c;否则团队将发现它几乎无法增长&#xff0c;…

云顶之弈机器人法爆_LOL云顶之弈机器人出装怎么选

LOL云顶之弈有很多强力英雄&#xff0c;例如机器人正是当中之一。该棋子可以搭配多种阵容&#xff0c;因此装备选择非常重要。那么机器人怎么出装&#xff1f;下面就为大家带来LOL云顶之弈机器人出装推荐。LOL云顶之弈机器人出装怎么选7人口成型8人口上龙女&#xff0c;9人口千…

C/C++图形化编程(1)

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 信念是一把无坚不摧的利刃&#xff01…

在VS2010中使用Git【图文】

在之前的一片博客《Windows 下使用Git管理Github项目》中简单介绍了在Windows环境中使用Git管理Github项目&#xff0c;但是是使用命令行来进行操作的&#xff0c;本文将简单介绍下在VS2010中怎样使用Git&#xff0c;并来管理Github上的项目。 准备 安装Git命令行&#xff0c;…

Docker swarm 笔记

防火墙开放端口&#xff1a; TCP port 2377为集群管理通信TCP and UDP port 7946 为节点间通信UDP port 4789 为网络间流量创建attachable network docker network create --driveroverlay --attachable mynet-core 查看网络 docker network ls在manager1上创建swarm集群&#…

LeetCode-reverse integer复杂度

1、题目&#xff1a; Reverse digits of an integer. Example1: x 123, return 321Example2: x -123, return -321 Have you thought about this? Here are some good questions to ask before coding. Bonus points for you if you have already thought through this!…

juyter显示决策树图形_决策树分析细分市场

一&#xff0c;前言决策树就是利用图形来表述某项决策的本质&#xff0c;展现了各种选择和不确定因素之间的相互关系。决策树是一个利用像树一样的图形或决策模型的决策支持工具&#xff0c;包括随机事件结果&#xff0c;资源代价和实用性。它是一个算法显示的方法。决策树经常…

测试框架之GTest

gtest是google的一个C/C测试框架&#xff0c;由C实现&#xff0c;可在http://code.google.com/p/googletest/下载其源码及库文件。 gtest用法和cppunit用法差不多&#xff0c;个人比较习惯gtest&#xff0c;使用比cppunit方便些。主要通过宏TEST_F定义测试用例&#xff0c;通过…

idea使用junit测试_在JUnit测试中使用Builder模式

idea使用junit测试这并不是要成为技术含量很高的职位。 这篇文章的目的是为您提供一些指导&#xff0c;以使您的JUnit测试生活更加轻松&#xff0c;使您能够在几分钟内编写复杂的测试场景&#xff0c;并获得具有高度可读性的测试。 单元测试中有两个主要部分&#xff0c;需要编…

LeetCode-best time to buy and sell stock 2 数组

1、问题&#xff1a; Say you have an array for which the i th element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock mu…

机器人酷跑闯关_机器人酷跑游戏下载-机器人酷跑手机版下载-地之图下载

机器人酷跑是一款机器人跑酷为游戏题材的动作冒险类游戏。在游戏中你将变成一个小机器人&#xff0c;你需要在各个平台上不断的进行跳跃&#xff0c;躲避各种障碍物以及陷阱&#xff0c;让你可以安全的到达终点。感兴趣的话就赶紧下载游戏玩玩吧&#xff01;机器人酷跑游戏简介…

Visual Studio属性配置中使用宏

在学习C语言的时候&#xff0c;我们曾经遇到过一个宏的概念。宏的作用机理本质上是宏的展开&#xff0c;C语言中的宏的用法也有很多种&#xff08;水其实很深...&#xff09;&#xff0c;不过从感觉上来讲&#xff0c;人们大致上会在以下的场景中&#xff0c;利用宏来解决一些窘…

CodeForces - 500A-New Year Transportation(模拟)

New Year is coming in Line World! In this world, there are n cells numbered by integers from 1 to n, as a 1  n board. People live in cells. However, it was hard to move between distinct cells, because of the difficulty of escaping the cell. People wanted…

LeetCode-best time to buy and sell stock 1 数组

1.问题 Say you have an array for which the i th element is the price of a given stock on day i. If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit. …

linq 清除一条数据中的某个字段值_B端通用批量数据导入方案设计

点击上方蓝色字体&#xff0c;关注我B端通用批量数据导入方案设计文 | 3548字估计阅读 | 9分钟引题B端产品经常遇到大量数据录入的需求。如春季招聘完成后&#xff0c;给新招的120个员工建立员工档案&#xff0c;并创建员工帐号。如果逐条将大量的数据录入系统&#xff0c;将花…

Google C++单元测试框架(Gtest)系列教程之一——入门

引言 本文将先介绍单元测试的相关概念&#xff0c;然后引入Google的开源C单元测试框架Gtest&#xff0c;最后通过编译、运行Gtest自带的一个测试样例&#xff0c;介绍如何在Unix/Linux下使用Gtest。 单元测试 说到单元测试&#xff0c;大家应该不会陌生。作为软件开发过程…

luoguP3185 [HNOI2007]分裂游戏 枚举 + 博弈论

每个位置的瓶子中的每个石子是一个独立的游戏 只要计算出他们的\(sg\)值即可 至于方案数&#xff0c;反正不多\(n^3\)暴力枚举即可 反正怎么暴力都能过啊 复杂度\(O(Tn^3)\) #include <cstdio> #include <cstring> #include <iostream> #include <algorit…