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

来源:互联网 发布:战舰世界沙恩数据 编辑:程序博客网 时间:2024/06/06 19:08

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