对于 gtest,如何模拟具有相同名称但不同类型的方法
For gtest, how to mock methods which have the same name, but different types
我使用 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()
。
相关文章:
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 如何在没有实例的情况下获取非静态方法的类型?
- 如何修复"方法的类型与 PInvoke 不兼容"
- 将方法参数类型更改为子类中的派生类
- qml 未知方法返回类型:ArchiveFile*,即使调用了 qmlRegisterUncreatableType
- std::d eclval vs crtp,无法从不完整类型推断方法返回类型
- dlsym() 解决方法返回类型
- 运行 QML 时出现"未知方法参数类型"错误
- 如何检查模板类方法返回类型
- 覆盖方法返回类型,在C 中使用不完整的派生类
- 如何将方法指针类型转换为函数指针类型
- 类成员方法 - 返回类型模板
- 当使用const std::string&作为方法参数类型时,处理nullptr const char*的正确方法是什么?
- C++中具有多态模板类的未知方法返回类型
- 如何专门化模板化类,以采用不带参数的方法函数类型
- 是否可以使用Boost概念检查库验证方法返回类型
- 在类范围内获取虚方法的类型
- 如何专门化模板类方法基于类型特征?使用std::enable_if对非类函数有效,但对类方法无效
- c++中方法的类型
- 错误:JNI方法的类型冲突