首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gmock -如何重写库函数

Gmock -如何重写库函数
EN

Stack Overflow用户
提问于 2017-07-28 17:47:32
回答 1查看 1.5K关注 0票数 0

我试图重写一个简单的cmath库函数-- 'pow‘

下面是我的代码:

代码语言:javascript
复制
#include "stdafx.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <cmath>

class powInterface {
public:
    virtual ~powInterface() {}
    virtual double pow(double _Xx, int _Yx) = 0;
};

class LibXMock : public powInterface {
public:
    virtual ~LibXMock() {}
    MOCK_METHOD2(pow, double(double _Xx, int _Yx));
};

int main()
{

    LibXMock LibXMockObj;

    EXPECT_CALL(LibXMockObj, pow(10.00, 3));
    double ans = LibXMockObj.pow(10.00, 3);
    EXPECT_EQ(2, ans);
}   

代码编译得很好,但执行时会产生以下输出:

代码语言:javascript
复制
c:\gmock>
_test_example.cpp(36): error:       Expected: 2
To be equal to: ans
      Which is: 0
Press any key to continue . . .

我不确定为什么返回值是0-我想知道我们是否需要添加一个自定义的'pow‘方法,所以我注入了以下代码:

代码语言:javascript
复制
double pow(double _Xx, int _Yx)
{
    return LibXMockObj.pow(_Xx , _Yx);
}

现在编译器无法编译声明重新定义pow方法代码-因此,我如何实现自己的pow库方法并调用它?

EN

回答 1

Stack Overflow用户

发布于 2017-07-28 17:53:54

我没有尝试编译,但我的想法是这样做:

代码语言:javascript
复制
#include "stdafx.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <cmath>

class powInterface {
public:
    virtual ~powInterface() {}
    virtual double pow(double _Xx, int _Yx) = 0;
};

class LibXMock : public powInterface {
public:
    virtual ~LibXMock() {}
    MOCK_METHOD2(pow, double(double _Xx, int _Yx));
    double customPow(double _Xx, int _Yx) {
        return 2;
    }
};

int main()
{

    LibXMock LibXMockObj;

    EXPECT_CALL(LibXMockObj, pow(10.00, 3)).Times(1).WillOnce(::testing::Invoke(LibXMockObj, &LibXMock::customPow));
    double ans = LibXMockObj.pow(10.00, 3);
    EXPECT_EQ(2, ans);
}  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45370190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档