如何使用 VisualStudio2005设置 GoogleC + + 测试框架(gtest)

网站上没有对此进行记录,人们似乎在设置框架时遇到了问题。能否有人显示一个示例项目设置的一步一步的介绍?

67145 次浏览

在构建了 gtest 之后,我做了以下工作:

  1. 将 mypath gtest-1.0.1调试(或发布)添加到公共属性-> 链接器-> 常规-> 附加库目录
  2. 将 gtest.lib 和 gtest _ main. lib 添加到公共属性-> 链接器-> 输入-> 附加依赖项

之后,我只是使用 TEST 或 TEST _ F 编写我的测试,并将它们与我的主函数一起编译:

int main(int argc, char** argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

What Arlaharen said was basically right, except he left out the part which explains your linker errors. First of all, you need to build your application 没有 the CRT as a runtime library. You should always do this anyways, as it really simplifies distribution of your application. If you don't do this, then all of your users need the Visual C++ Runtime Library installed, and those who do not will complain about mysterious DLL's missing on their system... for the extra few hundred kilobytes that it costs to link in the CRT statically, you save yourself a lot of headache later in support (trust me on this one -- I've learned it the hard way!).

无论如何,要做到这一点,你去目标的属性-> C/C + +-> 代码生成-> 运行时库,它需要被设置为“多线程”为您的发布版本和“多线程调试”为您的调试版本。

由于 gtest 库是以相同的方式构建的,所以您需要确保链接到的是正确的 版本,否则链接器将拉入运行时库的另一个副本,这就是您看到的错误(顺便说一句,如果您使用 MFC 或不使用 MFC,这应该不会有什么不同)。您需要将 gtest 构建为 调试和发布模式,并保留这两个副本。然后链接到 gtest.lib/gtest _ main。Lib 和 gtestd.lib/gtest _ mind。调试版本中的 lib。

此外,您需要确保您的应用程序指向存储 gtest 头文件的目录(在属性-> C/C + +-> 一般-> 附加包含目录) ,但是如果您得到了链接器错误,我假设您已经设法得到这部分正确,否则您将有更多的编译器错误首先处理。

在 MicrosoftVisualStudio 中,错误配置的运行时库类型会导致链接错误。

VS2005(和2008)默认使用多线程 DLL 或多线程调试 DLL。 但是 GoogleTest 库默认使用多线程或多线程调试运行时。

因此,为谷歌测试库选择适当的运行时库类型(在配置属性-> 代码生成-> 运行时库中)。

我做了一个关于设置的视频教程: Http://www.youtube.com/watch?v=mzszwqommrs

(这些说明使得测试框架能够为 Debug 配置工作。将相同的过程应用于发布配置应该非常简单。)

获取 Google C + + 测试框架

  1. 下载最新的 Gtest 框架
  2. 解压到 C:\gtest

构建框架库

  1. 在 VisualStudio 中打开 C:\gtest\msvc\gtest.sln
  2. 将配置设置为“调试”
  3. 构建解决方案

创建和配置测试项目

  1. 创建一个新的解决方案,并选择模板 Visual C + + > Win32 > Win32控制台应用
  2. 右键单击新创建的项目并选择“属性”
  3. 将“配置”更改为“调试”。
  4. 配置属性 > C/C + + > 常规 > 附加包含目录: 添加 C:\gtest\include
  5. 配置属性 > C/C + + > 代码生成 > 运行时库: 如果您的代码链接到运行时 DLL,请选择多线程调试 DLL (/MDd)。如果不是,请选择多线程调试(/MTd)。
  6. 配置属性 > 链接器 > 常规 > 附加库目录: 根据 gtestd.lib 的位置添加 C:\gtest\msvc\gtest\DebugC:\gtest\msvc\gtest-md\Debug
  7. 配置属性 > 链接器 > 输入 > 附加依赖项: 添加 gtestd.lib

验证所有工作原理

  1. 在包含 main()函数的 Test Project 中打开 cpp。
  2. 粘贴以下代码:

    #include "stdafx.h"
    #include <iostream>
    
    
    #include "gtest/gtest.h"
    
    
    TEST(sample_test_case, sample_test)
    {
    EXPECT_EQ(1, 1);
    }
    
    
    int main(int argc, char** argv)
    {
    testing::InitGoogleTest(&argc, argv);
    RUN_ALL_TESTS();
    std::getchar(); // keep console window open until Return keystroke
    }
    
  3. Debug > Start Debugging

If everything worked, you should see the console window appear and show you the unit test results.

如果不想为测试编写自己的 main ()函数,可以使用 gtest _ main 中定义的 main ()函数。但是在 VS2012中你会得到链接器错误“入口点必须被定义”。 在您的测试项目集 ProjectProperties-> Linker-> System-> SubSystem to“ Console”中,这将强制 VS2012查找名为“ main ()”的入口点,并在 gtest _ main 中找到它。Lib (如果您已经正确地链接了它)。