Gtest学习笔记1.0

来源:互联网 发布:中日合邦 知乎 编辑:程序博客网 时间:2024/05/17 08:39

1、在Windows下编译gtest步骤:
(1)、将gtest-1.7.0.zip进行解压缩;
(2)、用vs2010打开msvc目录下的gtest.sln工程,需要进行转换,生成gtest、gtest_main、gtest_prod_test、gtest_unittest四个工程;
(3)、分别在Debug和Release下,选中Solution ‘gtest’,点击右键,执行Rebuild Solution,会在msvc/gtest/Debug下生成gtestd.lib、gtest_maind.lib库,在msvc/gtest/Release下生成gtest.lib、gtest_main.lib库。(用VS2010集体编译会出错,最好逐个编译,PS:其他:其他版本没试过)
2、创建新的工程Gtestsample
(1)、打开属性——配置属性——常规——字符集:使用多字节字符集
(2)、在C++常规——附加目录包含:F:\C#学习\test\gtestSamples\gtest-1.7.0\gtest-1.7.0\include(include文件夹所在的位置)
(3)在代码生成中选择多线程MTD(以上全部为Debug版本)
(4)在链接器——输入——附加依赖项中加入:F:\C#学习\test\gtestSamples\gtest-1.7.0\gtest-1.7.0\msvc\gtest\Debug\gtestd.lib;
参考网址:
http://blog.csdn.net/fengbingchun/article/details/39667571
http://www.cnblogs.com/coderzh/archive/2009/04/06/1430364.html
3、新建程序
这里引用http://blog.csdn.net/fengbingchun/article/details/39667571中的例子,在stdafx.h的头文件中要包括gtest的头文件

#pragma once#include "targetver.h"#include <stdio.h>#include <tchar.h>#include "gtest/gtest.h"

在stdafx.cpp中要给出gtest的路径,如下所示:

#include "stdafx.h"#ifdef _DEBUG#pragma comment(lib, "F:/C#学习/test/gtestSamples/gtest-1.7.0/gtest-1.7.0/msvc/gtest/Debug/gtestd.lib")#pragma comment(lib, "F:/C#学习/test/gtestSamples/gtest-1.7.0/gtest-1.7.0/msvc/gtest/Debug/gtest_maind.lib")#else#pragma comment(lib, "F:/C#学习/test/gtestSamples/gtest-1.7.0/gtest-1.7.0/msvc/gtest/Release/gtest.lib")#pragma comment(lib, "F:/C#学习/test/gtestSamples/gtest-1.7.0/gtest-1.7.0/msvc/gtest/Releasegtest_main.lib") #endif

上述路径分别包括debug和Release版本的路径,
新建一个头文件,记做fun.h

# ifndef _FOO_H_# define _FOO_H_int Foo(int a, int b){    if (a == 0 || b == 0)    {        throw "THAT IS Wrong";    }    int c = a % b;    if (c == 0)        return b;    return Foo(b, c);}#endif  

这是一个求取最大公约数的例子,如果a或b都为0,这抛出错误。c的值是a除b取余。如果a、b整除了,c就等于0。这时候就返回被除数b,否则返回函数Foo
现在对该头文件进行测试,在创建的工程文件cpp中进行测试,设计测试用例,对于a或b都等于0的情况,暂时不知道如何测试,小白刚开始学~忧伤ing(大神不要喷啊~~第一次写博客,学测试),言归正传:

#include "stdafx.h"#include "fun.h"TEST(fun,Foo){    EXPECT_EQ(1, Foo(1, 3));//判断Foo函数实参为4和10的时候,其结果是都等于2    EXPECT_EQ(6, Foo(30, 18));    EXPECT_EQ(30, Foo(30, 30));}int main(int argc, char* argv[]){    ::testing::InitGoogleTest(&argc, argv);    int i=RUN_ALL_TESTS();    system("pause");    return i;}

这里设计了三个测试用例,不全面,主要是还不知道其他测试函数怎么用,EXPECT_EQ(6, Foo(30, 18))中,Foo(30, 18)表示该函数取余后所得的值,6是真实值,判断二者是都相等,在主函数中RUN_ALL_TESTS()
表示在主函数中运行所有测试用例,结果如下:测试成功,还表明的测试所消耗的时间总共为6ms

0 0
原创粉丝点击