匹配googlemock中自定义类型的参数
Matching arguments of custom type in googlemock
我在使用google mock匹配函数参数到特定对象时遇到问题。
考虑以下代码:
class Foo
{
public:
struct Bar
{
int foobar;
}
void myMethod(const Bar& bar);
}
现在我有一些测试代码,它看起来像这样:
Foo::Bar bar;
EXPECT_CALL(fooMock, myMethod(Eq(bar));
所以我想确保当Foo::myMethod被调用时,参数看起来像我的本地实例化的bar对象。
当我尝试这种方法时,我得到如下错误消息:
gmock/gmock-matchers.h(738): error C2678: binary '==' : no operator found which takes a left-hand operand of type 'const Foo::Bar' (or there is no acceptable conversion)
我试着玩定义运算符==和!=(至少==两者作为自由函数的成员),使用Eq(ByRef(bar)),但我无法解决这个问题。唯一有用的是使用
Field(&Foo::Bar::foobar, x)
但是这种方式我必须检查我的结构中的每个字段,这似乎是大量的打字工作…
好吧,那我就对自己说:
必须为Foo::Bar:
提供操作符==实现bool operator==(const Foo::Bar& first, const Foo::Bar& second)
{
...
}
不要将其作为成员函数添加到Foo::Bar中,而是使用自由函数。
并且,吸取的教训是,要注意不要将它们放到匿名命名空间中。
相关文章:
- 扩展C++生成的代码的模板参数类型名称
- 如何在 c++ 中定义接受不同参数类型的函数向量?
- 在 C++ 中运行时调用模板时,是否可以切换模板的参数类型?
- 将函数参数类型声明为 auto
- 将函数的参数 - 签名从使用 'std::function<T>' 转换为模板参数类型
- 在 C++17 中调用具有不同参数类型的构造函数
- 具有先前参数类型匹配的参数包
- 我想知道为什么"std::unique_ptr<int> foo(新 int)"是合法的,因为"std::<int>unique_ptr"要求输入参数类型应该是"int"?
- 将可变参数类型列表的扩展打包为复杂类型的初始值设定项列表 - 合法吗?
- MSVC 错误:4 个重载中的任何一个都无法转换所有参数类型
- 使用constexpr + auto作为返回和参数类型的奇怪类型推导
- 如何从第一个参数推断第二个参数类型?
- C++模板函数中,指定回调函子/lambda 的参数类型,同时仍允许内联?
- 如何用不同的参数类型和数字回调函数
- C++stoi:这两个重载都无法转换所有参数类型
- 为什么std::{container}::template不能推导其参数类型
- 为模板参数类型中的新对象分配内存
- 为指向成员模板参数的指针推导额外模板参数类型的紧凑方式
- 使用std::conditional中的模板来确定函数参数类型
- C++中的短参数类型