Chr*_*sen 13 c++ googletest visual-studio googlemock
这将是一个自我回答的常见问题解答式问题。请参阅下面的答案。
使用 Visual Studio 2017/2019 设置新的Google Test 项目并开始编写测试非常容易(只要您不介意使用旧版本的 GoogleTest 版本)。
但是如何使用 GoogleMock 呢?你会认为自从谷歌前一段时间合并了 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)
Run Code Online (Sandbox Code Playgroud)
那么目前在 Visual Studio 中设置 GoogleTest/GoogleMock 的推荐(也是最不痛苦的)方式是什么?应该能够通过测试资源管理器发现、运行和调试测试。
Chr*_*sen 10
我找到了两种设置方法:将整个 GoogleTest 框架直接编译到每个测试项目中,或者创建一个库项目来保存它。使用库将缩短构建时间,但您需要确保库和测试项目上的编译/链接选项相同。
选项 1:在测试项目中直接编译 GoogleTest
gtest_main.cc到项目中。它应该在..\packages\gmock.1.10.0\lib\native\src\gtest\src\此时项目应该看起来像这样(如果不是,请尝试卸载并重新加载项目):
最后的配置步骤是禁用三个 Google文件的预编译头.cc文件(重要:也请注意空字段)。
选项 2:在静态库项目中使用 GoogleTest
.h/.cpp文件(pch.h,pch.cpp,framework.h,<ProjectName>.cpp,等)gtest_main.cc到项目中。它应该在..\packages\gmock.1.10.0\lib\native\src\gtest\src\gtest_main.cc(见上面的相关图片)。..\packages\gmock.1.10.0\lib\native\include\到测试项目的Include Directories解决方案结构现在应如下所示:
编写测试
无论哪种方式,您现在都可以开始使用 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"
Run Code Online (Sandbox Code Playgroud)
打开生成的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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4034 次 |
| 最近记录: |