test google c++ templates compilation cppunit googlemock

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); }