Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于gtest,如何模拟名称相同但类型不同的方法 < >我用GTest验证我的C++代码,现在我面临一个嘲弄的问题。 出于几个原因,我有一些方法,它们的名称相同,但类型参数和实现不同,如 void foo(int& i); void foo(double& d); void foo(float& f);_C++_Mocking_Googletest - Fatal编程技术网

对于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.));