2017-07-28 24 views
0

我試圖重寫一個簡單的CMATH庫函數 - 「戰俘」Gmock - 如何重寫庫函數

下面是我的代碼:

#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 - 我想知道,如果我們需要添加「戰俘」法的自定義,所以我注入下面的代碼:

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

現在編譯器無法編譯說明pow方法重定義的代碼 - 因此我該如何實現我自己的pow庫方法並調用它?

回答

0

我沒有嘗試編譯,但這個想法是做類似的東西:

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