对于 gtest,如何模拟具有相同名称但不同类型的方法

For gtest, how to mock methods which have the same name, but different types

本文关键字:方法 同类型 gtest 何模拟 模拟 对于      更新时间:2023-10-16

我使用 Gtest 来验证我的C++代码,现在我面临一个模拟问题。 出于几个原因,我有一些方法,它们具有相同的名称,但不同类型的参数和实现,例如

void foo(int& i);
void foo(double& d);
void foo(float& f);

对于他们,我制作了模拟方法,例如

MOCK_METHOD1(foo, void(int&));
MOCK_METHOD1(foo, void(double&));
MOCK_METHOD1(foo, void(float&));

但是,我不能对他们使用EXPECT_CALL。在测试代码中,我为 foo(int( 设置了操作,例如

EXPECT_CALL(mock_object, foo(_)).WillOnce(DoAll(SetArgReferee<0>(10),Return()));

但是,编译器失败了,因为目标在 int、double 和 float 之间不明确。

有没有办法将EXPECT_CALL用于特定类型的模拟方法?

我未能使用test::MatcherCast和testing::SafeMatcherCast,因为它们只接受const类型。但是,我需要更新参数,所以我无法使用 const。

您可以使用类型化的通配符(文档(:

EXPECT_CALL(mock_object, foo(An<int&>())).WillOnce(SetArgReferee<0>(10));
EXPECT_CALL(mock_object, foo(A<double&>())).WillOnce(SetArgReferee<0>(10.));

A<>An<>的意思完全相同,它们有两个名字只是为了更好地阅读。 在Godbolt上在线观看


旁注:您不必从void方法Return()