win7+vs2012下使用gtest

引言

C++的程序员离不开单元测试,同时为了实践TDD原则,开始学习Google提供的单元测试框架gtest。

一、获取gtest

github获取gtest

二、VS下编译

直接用vs2012打开msvc文件夹下的工程文件gtest.sln,提示单向升级,确认后打开工程,编译后报错:d:\googletest-master\googletest\include\gtest\gtest-printers.h(653): error C2977: “std::tuple”: 模板参数太多
在这里由于使用std::tuple,并且使用的个数达到10个,在VS2012里_VARIADIC_MAX默认定义为5,因此不支持5个以上的参数输入,因此编译提示上面的出错。

解决方法:在 include\gtest\gtest.h 中添加#define _VARIADIC_MAX 10

#define GTEST_INCLUDE_GTEST_GTEST_H_  

#define _VARIADIC_MAX 10  //add for vs2012  

#include <limits>  
#include <vector>  

编译时会报错:warning MSB8012: TargetPath(D:\googletest-master\googletest\msvc\gtest/Debug\gtest.lib) does not match the Library’s OutputFile property value…
这是因为升级解决方案后,项目配置属性中目标文件名($(ProjectName))和库管理器中输出文件名($(OutDir)gtestd.lib)不一致导致。

解决方法1:修改库管理文件中输出文件名为$(SolutionName)/$(Configuration)\ (ProjectName) (TargetExt)使其与“常规-输出目标文件名”一致
解决方法2:常规里面的“目标文件名”不要用宏,显式的写成输出文件名

Debug模式下采用解决方法2,设置目标文件名为gtestd,编译后得到gtestd.lib
Release模式下无该问题,编译后得到gtest.lib

三、demo测试

新建win32控制台应用程序,如图所示配置工程属性:
配置
另外:
在:C/C++ -> 代码生成 -> 运行库,若当前调试的是Debug版本,则设置为“多线程调试(/MTd)“;若为release,则设置为“多线程(/MT)”
在:链接器->输入->附加依赖项中,若当前调试的是Debug版本,添加D:\googletest-master\googletest\msvc\gtest\Debug\gtestd.lib;若为Release,则添加D:\googletest-master\googletest\msvc\gtest\Release\gtest.lib

demo代码如下:

#include <gtest\gtest.h>
#include <iostream>

int Foo(int a, int b) // 求a和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宏有两个参数,官方的对这两个参数的解释为:[TestCaseName,TestName]
//有一种理解为:[TestSuiteName,TestCaseName]
TEST(FooTest, HandleNoneZeroInput)
{
    EXPECT_EQ(2, Foo(4, 10));  //EXPECT_EQ宏用来比较两个数字是否相等。失败时,案例继续执行
    EXPECT_EQ(6, Foo(30, 18)); 
    ASSERT_EQ(5, Foo(2.5, 5));// 失败时,当前函数返回,后面的语句将不会执行
    EXPECT_EQ(2, Foo(16, 18)); 
}

int main(int argc, char* argv[])
{
    testing::InitGoogleTest(&argc, argv);

    RUN_ALL_TESTS();
    system("pause");//暂停控制台,便于调试观察;也可在cmd中直接运行生成的exe,查看运行结果
    return 0;
    //return RUN_ALL_TESTS();
}

四、运行结果:

运行结果

参考资料

玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest
vs2012 中使用 gtest

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值