Visual Studio 2010中的GoogleMock和GoogleTest

jco*_*jco 1 googletest visual-studio-2010 googlemock

有没有人在Visual Studio 2010中成功构建gmock和gtest?我已尝试使用1.5.0版,但我只能得到难以理解的编译错误.

bav*_*aza 6

我在谷歌小组中找到了关于在VS2010下构建gmock-1.5.0时发现的问题的这个帖子.在线程之后,我创建了一个简短的自述文件,对我有用,所以这里是:

  • Google Mock下载gmock 1.5.0 .
  • 提取到机器上的库文件夹(例如C:\ Libs\gmock-1.5.0).从现在开始,此文件夹将被称为"GMOCK_ROOT".
  • 打开VS2010,然后加载解决方案:GMOCK_ROOT\msvc\gmock.sln.让VS将其从VS2008转换为VS2010. 重要!不要双击GMOCK_ROOT\msvc下的解决方案文件.这导致转换不良.
  • 根据线程对源进行以下更改:

    • 在项目gmock - >私有头文件 - > gmock-internal-utils.h:

      • 201,202行:注释掉'助手'的功能:

      char Helper(To);

      static char (&Helper(...))[2]; // NOLINT

      • 第210-219行:用以下内容替换整个#ifdef..#endif部分:

      static const bool value = std::is_convertible<From, To>::value;

    • 在项目gmock_test - >源文件 - > gmock-printers_test.cc,第848行:执行显式转换的NULL参数void*,否则VS会自动认为它是一个null int.结果行应如下所示:

      t10(false, 'a', 3, 4, 5, 1.5F, -2.5, str, static_cast<void*>(NULL), "10");

      1. 构建解决方案.这应该导致4个警告,如下所述,(可能)是正常的.

希望这可以帮助,

波阿斯


步骤5中的VS2010编译器警告(参见结尾处的备注):

警告1警告C4996:'std :: _ Copy_impl':带有可能不安全的参数的函数调用 - 此调用依赖于调用者来检查传递的值是否正确.要禁用此警告,请使用-D_SCL_SECURE_NO_WARNINGS.请参阅有关如何使用Visual C++'Checked Iterators'的文档:C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\include\xutility 2227 1

警告2警告C4996:'std :: _ Copy_impl':带有可能不安全的参数的函数调用 - 此调用依赖于调用者来检查传递的值是否正确.要禁用此警告,请使用-D_SCL_SECURE_NO_WARNINGS.请参阅有关如何使用Visual C++'Checked Iterators'的文档:C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\include\xutility 2227 1

警告4警告C4413:'std :: tr1 :: _ Cons_node <_ Car,_Cdr> :: _ Value':引用成员初始化为一个在构造函数退出C:\ Program Files(x86)\ Microsoft Visual后不会保留的临时成员Studio 10.0\VC\include\tuple 137 1

警告3警告C4373:'testing :: gmock_generated_function_mockers_test :: MockFoo :: TakesConst':虚函数覆盖'testing :: gmock_generated_function_mockers_test :: FooInterface :: TakesConst',当参数仅与const/volatile不同时,编译器的先前版本没有覆盖限定符C:\ Libs\gmock-1.5.0\test\gmock-generated-function-mockers_test.cc 133 1

关于警告的评论:

  1. 警告1,2是关于因安全性而被弃用的xutility中的Copy().由于模拟库不是生产版本的一部分,我可以这样做.
  2. 根据线程警告4是可以的.
  3. 警告3:不确定,但一切似乎都运作良好.