但是关于使用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.h
,pch.cpp
,framework.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文件的
–戴夫·鲁斯克(Dave Ruske)
11月12日5:01