关于C#:如何在Visual Studio中使用GoogleMock?

How to use GoogleMock in Visual Studio?

这将是一个常见问题解答式的自我解答问题。请参阅下面的答案。

使用Visual Studio 2017/2019,可以很容易地设置一个新的Google Test项目并开始编写测试(只要您不介意仍然使用旧版本的GoogleTest)。

但是也要使用GoogleMock吗?您可能会认为,由于Google早前将gtest / gmock组合在一起,所以这才行得通。只需#include"gmock/gmock.h"并嘲笑即可。但是不,模板自动添加的GoogleTest NuGet软件包根本不包含gmock文件夹。

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

用来自Google的软件包替换Microsoft GoogleTest NuGet软件包会导致链接错误:

1
MSVCRTD.lib(exe_main.obj) : error LNK2019: unresolved external symbol _main referenced in function"int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)

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


我发现了两种设置方法:要么将整个GoogleTest框架直接编译到每个测试项目中,要么创建一个包含它的库项目。使用库可以缩短构建时间,但是您需要确保库和测试项目上的编译/链接选项相同。

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

  • 从Google测试模板创建一个新项目。如果需要,请在此处进行说明。
  • 卸载Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static NuGet程序包。
  • 从Google安装最新的gmock NuGet软件包(当前为v1.10.0)。
  • 将文件gtest_main.cc添加到项目中。它应该在..\\packages\\gmock.1.10.0\\lib\
    ative\\src\\gtest\\src\\
  • 这时项目应该看起来像这样(如果没有,请尝试卸载并重新加载项目):

    Solution

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

    enter

  • ..\\packages\\gmock.1.10.0\\lib\
    ative\\include\\
    添加到测试项目的VC Directories下的Include Directories
  • enter添加到pch.h文件中:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    //
    // pch.h
    // Header for standard system include files.
    //

    #pragma once

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #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);
    }