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

因为工作的需要,需要使用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。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值