window10搭建GTEST测试框架

我们一起来搭框架吧~

电脑配置

系统版本: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()   //TEST跑之前会执行SetUp
{
		cout << "SetUp" << endl;
	}
void  TestCase::TearDown() //TEST跑完之后会执行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,即可看到测试通过的终端窗口,搭建框架大功告成~~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,以下是一个使用gtest测试框架实现快速排序的示例代码: ```c++ #include <gtest/gtest.h> void quickSort(int arr[], int left, int right) { int i = left, j = right; int tmp; int pivot = arr[(left + right) / 2]; // partition while (i <= j) { while (arr[i] < pivot) i++; while (arr[j] > pivot) j--; if (i <= j) { tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; i++; j--; } }; // recursion if (left < j) quickSort(arr, left, j); if (i < right) quickSort(arr, i, right); } TEST(QuickSortTest, PositiveNos) { int arr[] = { 5, 2, 3, 1, 4 }; int n = sizeof(arr) / sizeof(arr[0]); quickSort(arr, 0, n - 1); ASSERT_EQ(arr[0], 1); ASSERT_EQ(arr[1], 2); ASSERT_EQ(arr[2], 3); ASSERT_EQ(arr[3], 4); ASSERT_EQ(arr[4], 5); } TEST(QuickSortTest, NegativeNos) { int arr[] = { -5, -2, -3, -1, -4 }; int n = sizeof(arr) / sizeof(arr[0]); quickSort(arr, 0, n - 1); ASSERT_EQ(arr[0], -5); ASSERT_EQ(arr[1], -4); ASSERT_EQ(arr[2], -3); ASSERT_EQ(arr[3], -2); ASSERT_EQ(arr[4], -1); } TEST(QuickSortTest, MixedNos) { int arr[] = { -5, 2, -3, 1, 0 }; int n = sizeof(arr) / sizeof(arr[0]); quickSort(arr, 0, n - 1); ASSERT_EQ(arr[0], -5); ASSERT_EQ(arr[1], -3); ASSERT_EQ(arr[2], 0); ASSERT_EQ(arr[3], 1); ASSERT_EQ(arr[4], 2); } int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } ``` 在这个示例代码中,我们使用了gtest测试框架测试快速排序函数quickSort。我们定义了三个测试用例,分别测试了正数、负数和混合数的情况。在每个测试用例中,我们使用ASSERT_EQ宏来断言排序后数组的每个元素是否与预期值相等。如果不相等,则测试失败。 注意,这里的示例代码仅供参考,实际实现中可能需要根据具体情况进行相应修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只读一本心术书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值