2017-07-28 2 views
0

je tentais de passer outre une simple fonction de bibliothèque cmath - « Pow »Gmock - comment remplacer la fonction bibliothèque

Voici mon code:

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

Le code compile bien, mais l'exécution ci-dessous donne la sortie:

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

Je ne suis pas sûr pourquoi valeur retournée est 0 - Je me suis demandé si nous devons ajouter une définition auto de la méthode « pow » donc j'injectais le code ci-dessous:

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

Maintenant, le compilateur ne parvient pas à compiler le code indiquant la redéfinition de la méthode pow - comment puis-je implémenter ma propre méthode de bibliothèque de pow et l'appeler?

Répondre

0

Je n'ai pas essayé de compiler, mais l'idée est de faire quelque chose comme ça:

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