gmock: как смоделировать функцию пространства имен, вызываемую из моей функции класса - PullRequest
0 голосов
/ 25 февраля 2020

Вариант использования:

У меня есть метод пространства имен, как показано ниже:

Файл: io.h

#ifndef UTIL_IO_H
#define UTIL_IO_H
namespace util {
int myfunc(int param1);
}//end of namespace util
#endif //UTIL_IO_H

Файл io. cpp:

#include<iostream>
#include "io.h"
using namespace std;
namespace util {
int myfunc(int param1){
  if(param1 != 0 ){
        cout << "param is non zero" <<  endl;
        return 1;
  }else
  {
        cout << "param is 0" << endl ;
        return 0;
  }
}
}//end of namespace util

Файл: myclass. cpp (класс, вызывающий функцию пространства имен)

#include<iostream>
#include "io.h"
using namespace util;
using namespace std;
class myclass{
        protected :
                int calculated;
        public :
                myclass() {}

                int setCalculated(int inp){
                        cout << "i came in setcalculated" << endl;
                        calculated  = util::myfunc(inp);
                        cout << "myfnc returnd:" << calculated << endl;}
                ~myclass(){}
};

Теперь мое требование - смоделировать вызов функции "util :: myfun c"

Я попробовал следующий код: file: maintest. cpp

#include "myclass.cpp"
#include<iostream>
#include<vector>
#include<gtest/gtest.h>
#include<gmock/gmock.h>
using namespace std;
using ::testing::AtLeast;
using ::testing::Return;
using ::testing::_;
using ::testing::Invoke;

struct testmyfunc{
        int dummymyfunc(int i){
                if(i > 0){
                        cout << "Hey!! I came in mock fucntion and value is non zero" << endl;
                        return (i*2);
                }else{
                        cout << "Hey!! I came in mock function and value is zero" << endl;
                        return -1;
                }}};

class testLogin  :public ::testing::TestWithParam<std::tuple<int,int>> {
protected:};

TEST_P(testLogin, Login) {
        int inpparam = std::get<0>(GetParam());
        int expval = std::get<1>(GetParam());

        testmyfunc tst;
        myclass mc;

        EXPECT_CALL(mc,myfunc(_)).Times(1).WillOnce(Invoke(&tst,&testmyfunc::dummymyfunc));

        int returnedVal = mc.setCalculated(inpparam);
        cout << "expect clal returnedL" << endl;
        cout << returnedVal << endl;
        EXPECT_EQ(returnedVal,expval);}

INSTANTIATE_TEST_CASE_P(ValidatePermutations, testLogin,
                        ::testing::Values(
                                std::make_tuple(0,-1),
                                std::make_tuple(2,4)));

int main(int argc, char** argv) {
        ::testing::InitGoogleMock(&argc, argv);
        return RUN_ALL_TESTS();}

Компиляция завершается с ошибкой:

g++ -std=c++11  -lgmock -lgtest -lgtest_main -lpthread maintest.cpp
In file included from /usr/local/include/gmock/gmock-generated-function-mockers.h:44:0,
                 from /usr/local/include/gmock/gmock.h:62,
                 from maintest.cpp:5:
maintest.cpp: In member function ‘virtual void testLogin_Login_Test::TestBody()’:
maintest.cpp:44:2: error: ‘myclass::gmock_util’ has not been declared
EXPECT_CALL(mc,util::myfunc(_)).Times(1).WillOnce(Invoke(&tst,&testmyfunc::dummymyfunc));

Нужно понять, как такие не учащиеся могут быть осмеяны / зарезаны? Любые вклады будут оценены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...