您的位置:首页 > 其它

学习gtest笔记<1-VS2013环境搭建>

2016-02-18 20:39 337 查看
因为工作的需要,需要使用gtest,就开始学起了gtest,写下这个博客,就当是一个学习笔记吧,在这里非常感谢“玩转Google开源C++单元测试框架Google Test系列”,我是照着他的博客进行学习的,他的博客的地址http://www.cnblogs.com/coderzh/archive/2009/03/31/1426758.html

我的系统及软件配置:

系统配置:win7 64bit专业版

VS版本:VS2013 Ultimate(旗舰版) 64 bit中文版

GTest版本:release-1.7.0

资源获取

源代码下载地址:https://github.com/google/googletest/tree/release-1.7.0

编译gtest

解压下载好的源码压缩包,进入到msvc目录下,打开VS工程,会提示升级,一路OK就行了。

1、在解决方案资源管理器中,依次(配置)编译四个工程,其实下载下来的源码,默认工程配置是可以的,下图中的圆圈运行库目录很重要,和被测代码的工程设置有关,完成后会发现在googletest-release-1.7.0\msvc\gtest\Debug目录下多了一个gtestd.lib,这就是我们需要的库。注意,用哪个版本的VS写代码,就要用相同的VS版本编译GTest。

2、GTest编译就完了,现在可以写的Demo程序玩一玩,现在用VS2013建立一个工程。修改(添加)该项目属性的C/C++ -> 常规 -> 附加附加包含目录,添加gtest下的include目录。修改(添加)该项目的属性的连接器 -> 输入 -> 附加依赖项,把上面生成的 gtestd.lib添加进来。

3、配置到此结束,接下来开始coding。完了之后,可以愉快的按Ctrl + F5,然后会看到很有感觉的黑背景亮绿色,如果有红色,很不幸的告诉你,代码有Bug。

Demo

//Foo.cpp
/*
*本代码作为GTest学习的入门。*
*主要用于熟悉VS2013的测试配置环境*
*认识测试的流程*
*/

#include "stdafx.h"
#include <iostream>
#include <gtest\gtest.h>
using namespace std;

//被测函数
int Foo(int a, int b)
{
if (a == 0 || b == 0)
{
throw "don't do that";
}
int c = a % b;
if (c == 0)
{
return b;
}
return Foo(b, c);
}

TEST(FooTest, HandleNoneZeroInput)
{//第一个参数是测试用例名,第二个参数是测试名:随后的测试结果将以"测试用例名.测试名"的形式给出
EXPECT_EQ(3, Foo(4.123, 10));
EXPECT_EQ(6, Foo(30, 18));
EXPECT_EQ(600, Foo(1, 18));
}

int _tmain(int argc, _TCHAR* argv[])
{
// gtest的测试案例允许接收一系列的命令行参数,将命令行参数传递给gtest,进行一些初始化操作。gtest的命令行参数非常丰富。
testing::InitGoogleTest(&argc, argv);
RUN_ALL_TESTS();
getchar();
return 0;
}


TEST宏:TEST宏的作用是创建一个简单测试,它定义了一个测试函数,在这个函数里可以使用任何C++代码并使用提供的断言来进行检查。

TEST的第一个 参数是测试用例名,第二个 参数是测试用例中某项测试的名称。一个测试用例可以包含任意数量的独立测试。这两个参数组成了一个测试的全称。

我们要测试这个函数:int Factorial(int n); // 返回n的阶乘

我们的测试用例是:测试输入0的情况和测试输入其它数据的情况,于是就有了:

TEST(TestFactorial, ZeroInput)
{
EXPECT_EQ(1, Factorial(0));   //EXPECT_EQ稍后再说,现在只要知道它是测试两个数据是否相等的就行了。
}
TEST(TestFactorial, OtherInput)
{
EXPECT_EQ(1, Factorial(1));
EXPECT_EQ(2, Factorial(2));
EXPECT_EQ(6, Factorial(3));
EXPECT_EQ(40320, Factorial(8));
}


Google Test根据测试用例来分组收集测试结果,因此,逻辑相关的测试应该在同一测试用例中;换句话说,它们的TEST()的第一个参数应该是一样的。在上面的例子中,我们有两个测试,ZeroInput和OtherInput,它们都属于同一个测试用例TestFactorial。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  软件测试-gtest