我们一起来搭框架吧~
电脑配置
系统版本:window10 系统类型:64位操作系统 编译器:Visual Studio2013
框架源码传送门
下载地址:GTEST源码传送门
解压代码
我们这里首先需要打开msvc文件中的.sln解决方案,这里我用的是gtest.sln 这时候在编译器vs2013里面会跳出来一大推迁移更新文件,只要一顿点继续就好,直到达到你的目的,就是打开这个解决方案,过程不重要~
--build-aux
--cmake
--codegear
--include
--m4
--make
--msvc(这个是我们需要打开的文件夹)
--samples
--scripts
--src
--test
--xcode
打开解决方案居然有四个工程!内心崩溃
打开gtest.sln解决方案方案有以下四个工程:
--gtest
--gtest_main
--gtest_prod_test
--gtest_unittest
注意:我这里搭建的是Debug版本的GTEST环境!!! (1) 右键gtest工程,列表中点击设置为启动项 (2) 项目–属性–配置(属性页最上面有配置选择项)–选择Debug(如果是release版本就选release哦~)–平台(发现只有win32,内心又一次崩溃)–点击配置管理器–点击项目gtest的平台下拉选项–新建(新建平台选择x64,然后确认)–接下来就是点击本地windows调试器,生成gtestd.lib (3)同样的步骤,在gtest_main工程中生成gtest_maind.lib 很多博都是直接说gtestd.lib和gtest_maind.lib,这里是需要自己编译生成的~不然msvc文件中没有其他任何文件夹!! 生成的gtestd.lib和gtest_maind.lib的路径为:msvc/x64/Debug(这里可以验证你的版本和平台是否正确)
新建工程,导入lib文件和头文件
这里首先要科普和总结我多这两文件的理解,当然如果你了解的话直接略过~ 头文件:头文件里一般包括宏定义, 全局变量, 函数原型声明,头文件是.h形式的文件
lib文件:很多人认为lib为静态库,dll为动态库,这理解并不错,但不全面。lib其实分两种的 第一种, lib是完整的静态库,里面有函数代码本身,在编译时直接将代码加入程序当中,应用程序直接使用 第二种,lib是动态库的导出声明,只包含头部信息。里面只有函数所在的DLL文件和文件中函数位置的入口,代码由运行时加载在进程空间中的DLL提供
dll文件(这里顺道总结一下,方便理解): DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。 DLL文件中存放的是各类程序的函数(子过程)实现过程,当程序需要调用函数时需要先载入DLL,然后取得函数的地址,最后进行调用。使用DLL文件的好处是程序不需要在运行之初加载所有代码,只有在程序需要某个函数的时候才从DLL中取出。另外,使用DLL文件还可以减小程序的体积。
好了好了,继续开始搭建~ (1)首先创建一个新的工程,至于名字和位置这个自己决定咯,一般都是project1这样子咯~ (2)打开工程文件所在的位置,有个工程命名的文件夹和解决方案(.sln) (3)规范一点话,把头文件和lib文件放在工程命名的文件夹下面(这里需要创建两个文件夹,一个为lib,一个为include) (4)将GTEST源码include/gtest整个文件复制到新工程的include中,将gtestd.lib和gtest_maind.lib复制到新工程中的lib中 (5)项目–配置属性–c/c+±-常规–附加包含目录–编辑–添加工程include路径(考虑到工程的可移植性,可以用右下角的宏定义对路径进行简略)比如$(ProjectDir)/include (6)项目–配置属性–链接器–常规–链接库依赖项–编辑–添加工程lib路径(这里你可能会遇到没有链接器这个子选项的问题,解决方法:项目–属性–配置属性)–常规–配置类型–选择动态链接库或者应用程序–应用) (7)项目–配置属性–链接器–输入–附加依赖项–添加gtest_maind.lib和gtestd.lib
编写测试用例,运行框架
创建主函数(main.cpp)
#include "gtest\gtest.h"
int main(int argc, char **argv){
testing::InitGoogleTest(&argc, argv);
RUN_ALL_TESTS();
system("pause");
return 0;
}
创建test.cpp
#include "gtest\gtest.h"
#include"class.h"
TEST_F(TestCase, test01){
EXPECT_EQ(1 + 1, 2);
}
创建class.cpp
#include "gtest\gtest.h"
#include"class.h"
using namespace std;
void TestCase::SetUpTestCase()
{
cout << "SetUpTestCase" << endl;
}
void TestCase::TearDownTestCase()
{
cout << "TearDownTestCase" << endl;
}
void TestCase::SetUp()
{
cout << "SetUp" << endl;
}
void TestCase::TearDown()
{
cout << "TearDown" << endl;
}
创建class.h
#include "gtest\gtest.h"
class TestCase :public testing::Test
{
public:
static void SetUpTestCase();
static void TearDownTestCase();
protected:
virtual void SetUp();
virtual void TearDown();
};
运行main.cpp,即可看到测试通过的终端窗口,搭建框架大功告成~~
|