gpt4 book ai didi

c++ - 为什么 Google Mocks 发现这个函数调用不明确?

转载 作者:IT老高 更新时间:2023-10-28 22:17:55 24 4
gpt4 key购买 nike

我在尝试开始使用 Google Mocks 时遇到了一个问题 - 由于某种原因,它无法告诉我在 EXPECT_CALL 宏中指定的调用,即使类型是一致的.我想知道为什么它不只匹配第一个函数,以及我需要做什么/添加以使其匹配第一个函数。

模拟类:

class GMockTest : public ITest
{
public:
MOCK_METHOD2(SetParameter,
int(int nParameter, double value));
MOCK_METHOD2(SetParameter,
int(int nParameter, int value));
MOCK_METHOD2(SetParameter,
int(int nParameter, __int64 value));
}

抛出错误的测试代码:

__int64 nFrom = 0,
nTo = 0;

EXPECT_CALL(mock, SetParameter(2, nFrom))
.Times(1)
.WillOnce(Return(0));
EXPECT_CALL(mock, SetParameter(3, nTo))
.Times(1)
.WillOnce(Return(0));

编译错误:

test.cpp(1343) : error C2668: GMockTest::gmock_SetParameter' : ambiguous call to overloaded function
testmocks.h(592): could be 'testing::internal::MockSpec<F>
&GMockTest::gmock_SetParameter(const testing::Matcher<T> &,const testing::Matcher<A2> &)
'
with
[
F=int (int,__int64),
T=int,
A2=__int64
]
testmocks.h(590): or 'testing::internal::MockSpec<F>
&GMockTest::gmock_SetParameter(const testing::Matcher<T> &,const testing::Matcher<T> &)'

with
[
F=int (int,int),
T=int
]
testmocks.h(580): or 'testing::internal::MockSpec<F>
&GMockTest::gmock_SetParameter(const testing::Matcher<T> &,const testing::Matcher<FloatT
ype> &)'
with
[
F=int (int,double),
T=int,
FloatType=double
]
while trying to match the argument list '(int, __int64)'

最佳答案

Google mock 无法判断使用哪个重载。来自 cookbook ,尝试使用 Matcher<T>TypedEq<T>匹配器来指定确切的类型:

struct ITest
{
virtual int SetParameter(int n, double v) = 0;
virtual int SetParameter(int n, int v) = 0;
virtual int SetParameter(int n, __int64 v) = 0;
};

struct MockTest : public ITest
{
MOCK_METHOD2(SetParameter, int(int n, double v));
MOCK_METHOD2(SetParameter, int(int n, int v));
MOCK_METHOD2(SetParameter, int(int n, __int64 v));
};

TEST(Test, Test)
{
MockTest mock;
__int64 nFrom = 0, nTo = 0;
EXPECT_CALL(mock, SetParameter(2, Matcher<__int64>(nFrom)));
EXPECT_CALL(mock, SetParameter(3, Matcher<__int64>(nTo)));

mock.SetParameter(2, nFrom);
mock.SetParameter(3, nTo);
}

关于c++ - 为什么 Google Mocks 发现这个函数调用不明确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14844720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com