Вариант использования:
У меня есть метод пространства имен, как показано ниже:
Файл: 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));
Нужно понять, как такие не учащиеся могут быть осмеяны / зарезаны? Любые вклады будут оценены.