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

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

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

将Microsoft GoogleTest NuGet程序包替换为来自Google的一种方法导致链接错误:

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的当前推荐的(最痛苦的)方法是什么?应该可以通过“测试资源管理器”发现,运行和调试测试。

#1 楼

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


从Google Test模板创建一个新项目。如果需要,请在此处进行说明。
卸载Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static NuGet软件包。
从Google安装最新的gmock NuGet软件包(当前为v1.10.0)。
将文件gtest_main.cc添加到项目中。它应该在..\packages\gmock.1.10.0\lib\native\src\gtest\src\


此时项目应该看起来像这样(如果不是,请尝试卸载并重新加载项目):

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

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


从静态库(C ++)模板创建一个新项目。
删除所有生成的.h / .cpp文件(pch.hpch.cppframework.h<ProjectName>.cpp等)
从Google安装最新的gmock NuGet软件包(当前为v1.10.0)。
禁止对库项目使用预编译头(请参见上面的相关图片)。
从Google Test模板创建一个新项目。如果需要,请在此处进行说明。
卸载Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static NuGet软件包。
将文件gtest_main.cc添加到项目中。它应该在..\packages\gmock.1.10.0\lib\native\src\gtest\src\中。

gtest_main.cc禁用预编译头(请参见上面的相关图片)。
将库项目添加到测试项目的项目参考中。
..\packages\gmock.1.10.0\lib\native\include\添加到VC ++目录下的测试项目的“包含目录”中



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

编写测试

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

#pragma once

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

打开生成的Test.cpp文件并尝试。
#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);
}


评论


在编译gmock时是否会看到数百个错误,需要注意的一件事:似乎在vcxproj文件的部分中,至关重要的是googletest导入行必须位于gmock之前。当删除和添加NuGet程序包时,这些程序可能会混乱。要解决此问题,只需在文本编辑器中加载vcxproj并交换行即可。

–戴夫·鲁斯克(Dave Ruske)
11月12日5:01