83

它没有在网站上记录,人们似乎在设置框架时遇到了问题。有人可以展示示例项目设置的分步介绍吗?

4

6 回答 6

109

(这些说明使测试框架适用于 Debug 配置。将相同的过程应用于 Release 配置应该非常简单。)

获取 Google C++ 测试框架

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

构建框架库

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

创建和配置您的测试项目

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

验证一切正常

  1. main()在包含该函数的测试项目中打开 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. 调试 > 开始调试

如果一切正常,您应该会看到控制台窗口出现并向您显示单元测试结果。

于 2010-11-19T04:48:15.783 回答
45

Arlaharen 所说的基本上是正确的,除了他遗漏了解释您的链接器错误的部分。首先,您需要在没有CRT 作为运行时库的情况下构建您的应用程序。无论如何,您应该始终这样做,因为它确实简化了您的应用程序的分发。如果您不这样做,那么您的所有用户都需要安装 Visual C++ 运行时库,而那些不这样做的用户会抱怨他们的系统上缺少神秘的 DLL……因为链接需要额外的几百 KB静态的 CRT,您在以后的支持中可以省去很多麻烦(相信我——我已经学会了很难!)。

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

由于 gtest 库是以相同的方式构建的,因此您需要确保链接到它的正确版本否则链接器将拉入运行时库的另一个副本,这是您看到的错误(顺便说一句,这个无论您是否使用 MFC,都不应该有所作为)。您需要将 gtest 构建为Debug 和 Release模式并保留两个副本。然后,在 Release 构建中链接 gtest.lib/gtest_main.lib,在 Debug 构建中链接 gtestd.lib/gtest_maind.lib。

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

于 2009-02-10T17:37:13.247 回答
6

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

于 2010-08-25T04:02:32.323 回答
5

构建了 gtest,这就是我所做的:

  1. 将 \mypath\gtest-1.0.1\Debug(或 Release)添加到 Common Properties->Linker->General->Additional Library Directories
  2. 将 gtest.lib 和 gtest_main.lib 添加到 Common Properties->Linker->Input->Additional Dependencies

之后,我只需根据需要使用 TEST 或 TEST_F 编写测试,并将它们与我的 main 函数一起编译:

int main(int argc, char** argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
于 2009-02-10T12:36:00.677 回答
5

如果您不想编写自己的 main() 进行测试,可以使用 gtest_main.lib 中定义的 main() 函数,但是在 VS2012 中会出现链接器错误“必须定义入口点”。在您的测试项目中,将 ProjectProperties->Linker->System->SubSystem 设置为“Console”,因为这将强制 VS2012 寻找一个名为“main()”的入口点,并在 gtest_main.lib 中找到它(前提是您已经链接它正确)。

于 2013-02-25T23:51:20.440 回答
2

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

VS 2005(和 2008)默认使用多线程 DLL 或多线程调试 DLL。但谷歌测试库默认使用多线程或多线程调试运行时。

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

于 2009-07-14T07:01:56.120 回答