How to use GoogleMock in Visual Studio?
这将是一个常见问题解答式的自我解答问题。请参阅下面的答案。
使用Visual Studio 2017/2019,可以很容易地设置一个新的Google Test项目并开始编写测试(只要您不介意仍然使用旧版本的GoogleTest)。
但是也要使用GoogleMock吗?您可能会认为,由于Google早前将gtest / 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
ative\\src\\gtest\\src\\
这时项目应该看起来像这样(如果没有,请尝试卸载并重新加载项目):
最后的配置步骤是禁用三个Google
选项2:在静态库项目中使用GoogleTest
ative\\src\\gtest\\src\\
ative\\include\\
解决方案结构现在应如下所示:
编写测试
无论哪种方式,您现在都可以开始使用GoogleMock编写测试了。将
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" |
打开生成的
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); } |