对于gtest,如何模拟名称相同但类型不同的方法 < >我用GTest验证我的C++代码,现在我面临一个嘲弄的问题。 出于几个原因,我有一些方法,它们的名称相同,但类型参数和实现不同,如 void foo(int& i); void foo(double& d); void foo(float& f);
对于他们,我制作模拟方法,比如对于gtest,如何模拟名称相同但类型不同的方法 < >我用GTest验证我的C++代码,现在我面临一个嘲弄的问题。 出于几个原因,我有一些方法,它们的名称相同,但类型参数和实现不同,如 void foo(int& i); void foo(double& d); void foo(float& f);,c++,mocking,googletest,C++,Mocking,Googletest,对于他们,我制作模拟方法,比如 MOCK_METHOD1(foo, void(int&)); MOCK_METHOD1(foo, void(double&)); MOCK_METHOD1(foo, void(float&)); 然而,我不能指望他们的电话。在测试代码中,我为foo(int)设置了动作,如 EXPECT_调用(mock_对象,foo()).WillOnce(DoAll(setargreference(10),Return()); 但,编译器失败,因为目标
MOCK_METHOD1(foo, void(int&));
MOCK_METHOD1(foo, void(double&));
MOCK_METHOD1(foo, void(float&));
然而,我不能指望他们的电话。在测试代码中,我为foo(int)设置了动作,如
EXPECT_调用(mock_对象,foo()).WillOnce(DoAll(setargreference(10),Return());
但,编译器失败,因为目标在int、double和float之间不明确
有没有办法对特定类型的mock方法使用EXPECT\u调用
我未能使用testing::MatcherCast和testing::SafeMatcherCast,因为它们只接受常量类型。但是,我需要更新参数,因此无法使用常量。您可以使用类型化通配符():
EXPECT_调用(mock_对象,foo(An()).WillOnce(setargreference(10));
EXPECT_调用(mock_对象,foo(A()).WillOnce(setargreference(10));
A
和An
的意思完全相同,它们有两个名字只是为了更好地阅读。
在线查看
旁注:您不必从
void
方法中Return()
。您是否尝试过类似的方法,EXPECT\u调用(mock\u对象,foo(AnyOf(Eq(0),Ne(0)))代码>?否则,我认为您需要实现自己的matcher…谢谢您,Yksisarvinen。它对我有效,没有链接错误。
EXPECT_CALL(mock_object, foo(_)).WillOnce(DoAll(SetArgReferee<0>(10),Return()));
EXPECT_CALL(mock_object, foo(An<int&>())).WillOnce(SetArgReferee<0>(10));
EXPECT_CALL(mock_object, foo(A<double&>())).WillOnce(SetArgReferee<0>(10.));