加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用对象的Google Mock和SetArgPointee

发布时间:2020-12-16 07:09:20 所属栏目:百科 来源:网络整理
导读:我最近使用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){
我最近使用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);
}

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

我读了GMock的烹饪书,我还需要一个复制构造函数和赋值运算符.如果我使用调试器,我可以看到复制构造函数被调用4次,并且永远不会调用赋值运算符.

任何人都可以指出错误吗?在ana2中读取与ana1相同的对象后,我需要做什么?

解决方法

SetArgPointee不使用多态对象:)如果Read的签名是int Read(ARox * ana);而ARox是一个抽象类,而rox是从ARox继承的,没有达到预期

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读