c++ - google test install
¿Por qué Google Mocks encuentra que esta función es ambigua? (1)
Me he encontrado con un problema al intentar comenzar a utilizar Google Mocks: por alguna razón, no puede distinguir la llamada que especifico en la macro EXPECT_CALL
, aunque los tipos son consistentes. Quiero saber por qué no solo coincide con la primera función, y qué debo hacer / agregar para que coincida con la primera función.
La clase falsa:
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));
}
El código de prueba que arroja el error:
__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));
El error de compilación:
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 tiene problemas para decir qué sobrecarga usar. En el libro de cocina , intente utilizar los TypedEq<T>
Matcher<T>
o TypedEq<T>
para especificar el tipo exacto:
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);
}