gpt4 book ai didi

c++ - 使用对象的 Google Mock 和 SetArgPointee

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:17:25 24 4
gpt4 key购买 nike

我最近在使用 GMock,但无法在以下代码中成功使用 SetArgPointee。

class rox{
public :
int a, b;
rox(){}
rox(const rox &ana){
a = ana.a;
b = ana.b;
}
rox operator=(const rox& ana){
a = ana.a;
b = ana.b;
return *this;
}
};

TEST(Statistics, RandomReceived){
MockClass ms;
rox ana1, ana2;
EXPECT_CALL(ms, Read(_)).Times(1).WillOnce(DoAll(SetArgPointee<0>(ana1), Return(1)));
ms.Read(&ana2);
EXPECT_EQ(ana2.a, ana1.a);
EXPECT_EQ(ana2.b, ana1.b);
}

测试失败,因为调用读取函数后的ana2对象没有正确设置字段a和b。在 VS 中使用 watch 我可以看到 ana2.a 和 ana2.b 是垃圾值。

我在 GMock cooking 书中读到我还需要一个复制构造函数和一个赋值运算符。如果我使用调试器,我可以看到复制构造函数被调用了 4 次,而赋值运算符从未被调用。

谁能指出这里的错误?在ana2中读取与ana1相同的对象后,我需要做什么才能获得?

最佳答案

SetArgPointee 不适用于多态对象 :) 如果 Read 的签名是 int Read(ARox *ana);并且ARox是一个抽象类并且rox继承自ARox 不符合预期

关于c++ - 使用对象的 Google Mock 和 SetArgPointee,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24929405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com