首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Visual中使用GoogleMock?

如何在Visual中使用GoogleMock?
EN

Stack Overflow用户
提问于 2020-03-02 09:42:56
回答 1查看 7.9K关注 0票数 17

这将是一个自答,常见问题式问题。见下面的回答。

在VisualStudio2017/2019中,很容易设置一个新的Google测试项目并开始编写测试(只要您不介意使用旧版本的GoogleTest版本)。

但是使用GoogleMock又如何呢?你可能会认为,由于谷歌在一段时间前合并了gtest/gmock,所以这只会奏效。只是#include "gmock/gmock.h"和嘲笑。但是不是,由模板自动添加的GoogleTest NuGet软件包根本不包括gmock文件夹。

尝试添加第二个GoogleMock NuGet包会导致多个问题,例如gtest/gmock版本不匹配、重叠包含路径等。

将Microsoft GoogleTest NuGet包替换为一张来自谷歌将导致链接错误:

代码语言:javascript
复制
MSVCRTD.lib(exe_main.obj) : error LNK2019: unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)

那么,在Visual中设置GoogleTest/GoogleMock的当前推荐(也是最不痛苦的)方法是什么?测试应该能够通过Test被发现、运行和调试。

EN

回答 1

Stack Overflow用户

发布于 2020-03-02 09:42:56

我找到了两种方法来设置它:要么将整个GoogleTest框架直接编译到每个测试项目中,要么创建一个库项目来保存它。使用库将提供更快的构建时间,但您需要确保库和测试项目上的编译/链接选项是相同的。

选项1:在测试项目中直接编译GoogleTest

  1. Google 模板创建一个新项目。如有需要,指示这里
  2. 卸载Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static NuGet包。
  3. 从Google安装最新的格莫克 NuGet包(当前版本为1.10.0)。
  4. 将文件gtest_main.cc添加到项目中。应该在..\packages\gmock.1.10.0\lib\native\src\gtest\src\

此时,项目应该如下所示(如果没有,尝试卸载并重新加载项目):

最后的配置步骤是禁用对三个Google .cc文件的预编译头的使用(重要的是:注意空字段)。

选项2:在静态库项目中使用GoogleTest

  1. 静态库(C++)模板创建一个新项目。如有需要,指示这里
  2. 删除所有生成的.h/.cpp文件(pch.hpch.cppframework.h<ProjectName>.cpp等)
  3. 从Google安装最新的格莫克 NuGet包(当前版本为1.10.0)。
  4. 禁用库项目预编译头的使用(请参阅上面的相关图)。
  5. Google 模板创建一个新项目。如有需要,指示这里
  6. 卸载Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static NuGet包。
  7. 将文件gtest_main.cc添加到项目中。应该在..\packages\gmock.1.10.0\lib\native\src\gtest\src\
  8. 禁用gtest_main.cc预编译头的使用(见上面的相关图)。
  9. 将库项目添加到测试项目的项目引用中。
  10. ..\packages\gmock.1.10.0\lib\native\include\添加到测试项目的包含目录下的VC++目录

解决方案结构现在应该如下所示:

编写测试

无论哪种方式,现在都可以开始使用GoogleMock编写测试了。将#include "gmock/gmock.h"添加到pch.h文件中:

代码语言:javascript
复制
//
// pch.h
// Header for standard system include files.
//

#pragma once

#include "gtest/gtest.h"
#include "gmock/gmock.h"

打开生成的Test.cpp文件并尝试它。

代码语言:javascript
复制
#include "pch.h"

class MockTest {
public:
    MOCK_METHOD(void, SomeMethod, ());
};

TEST(TestCaseName, TestName) {
    MockTest mock;
    EXPECT_CALL(mock, SomeMethod);
    mock.SomeMethod();
    EXPECT_EQ(1, 1);
    EXPECT_TRUE(true);
}
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60486110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档