【问题标题】:Gmock - how to override library functionGmock - 如何覆盖库函数
【发布时间】:2017-07-28 09:47:32
【问题描述】:

我试图覆盖一个简单的 cmath 库函数 - 'pow'

下面是我的代码:

#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);
}   

代码编译正常,但执行后输出如下:

c:\gmock>
_test_example.cpp(36): error:       Expected: 2
To be equal to: ans
      Which is: 0
Press any key to continue . . .

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

double pow(double _Xx, int _Yx)
{
    return LibXMockObj.pow(_Xx , _Yx);
}

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

【问题讨论】:

    标签: c++ visual-studio gmock


    【解决方案1】:

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

    #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);
    }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 2011-07-21
      • 2016-05-04
      • 2012-10-16
      相关资源
      最近更新 更多