给定一个接口类Foo:
#ifndef FOO_H
#define FOO_H
#include <string>
class Foo
{
public:
Foo() = default;
virtual ~Foo() = default;
virtual void bar(std::string msg) = 0;
};
#endif
其模拟:
#ifndef FOO_MOCK_H
#define FOO_MOCK_H
#include "gtest/gtest.h"
#include "gmock/gmock.h"
class MockFoo: public Foo
{
public:
MOCK_METHOD(void, bar, (std::string), (override));
};
#endif
和一个愚蠢的测试:
#include "pch.h"
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "MockFoo.h"
using ::testing::NiceMock;
TEST(SillyTests, Silly)
{
std::string msg = "Hello, world!";
NiceMock<MockFoo> mock_foo;
EXPECT_CALL(mock_foo, bar)
.Times(1);
mock_foo.bar(msg);
}
在gtest和gmock内部的一系列错误中,Visual Studio抱怨MOCK_METHOD()
“名称后跟'::'必须是类或名称空间名称”,并且找不到函数定义MOCK_METHOD
。
有趣的是,添加旧的函数调用MOCK_METHODn
会产生相同的错误。
MOCK_METHOD1(debug, void(std::string msg));
将鼠标悬停在MOCK_METHOD
显示上有几个静态断言,但它们似乎并不正确。他们包括:
"(std::string)"
应该放在括号中(是)"(override)"
应该用括号括起来(再次是)void
,添加括号不能解决此问题)gmock版本为1.10.0,Google Test适配器版本为1.8.1.3。
解决了。googlemock和googletest不共享相同版本的原因。将googlemock降级至v1.8.1已解决了该问题。
您使用的是哪个版本的Google Test和Google Mock?