Я делаю гест.Функция, которую я хотел бы проверить, принимает два параметра.
int functionA(const ObjectA& obja, const stl::vector<ObjectB>& objb)
В моем тесте я хотел бы смоделировать некоторые тестовые случаи.
Для obja
я сделал следующее:
ObjectA* obja = new ObjectA();
obja->type() = someValue; //setter function
obja->value() = someValue; // setter too
и затем прошел*(const_cast<ObjectA*>(obja))
в качестве параметра.
Но для вектора я не уверен, что определяет const
.Я попытался:
stl::vector<ObjectB*>* input;
ObjectB objb = new ObjectB();
objb->type() = someValue // setter
objb->id() = someValue//setter
input.push_back(objb);
, затем передать *(const_cast<ObjectB*>(input))
в качестве параметра.
Но я получаю сообщение об ошибке, говорящее "нет соответствующей функции".
Может кто-нибудь сказать мнекак я могу смоделировать input
и передать его в gtest?
Для вашего удобства код в gtest (предположим, имя класса A):
ObjectA* obja = new ObjectA();
obja->type() = someValue; //setter function
obja->value() = someValue; // setter too
stl::vector<ObjectB*>* input;
ObjectB objb = new ObjectB();
objb->type() = someValue // setter
objb->id() = someValue//setter
input.push_back(objb);
A* instanceA = A::getInstance();
EXPECT_EQ(-2, instanceA->functionA(*(const_cast<ObjectA*>(obja)),*(const_cast<ObjectB*>(input)))) ;
Я также пытался не использоватьconst_cast
и указатели, я попытался:
const ObjectA a;
a.type() = somevalue;
a.value() = somevalue;
const stl::vector<ObjectB> input;
ObjectB objb;
objb.type() = some;
input.push_back(objb);
и просто передать input
и a
в качестве параметров в тесте.
но я получаю сообщение об ошибке "lvalue требуется в качестве левого операнда присваивания" на a.type() = somevalue;
Я думаю, это потому, что в классе ObjectA
есть два type()
, одинсеттер без const
, один - геттер с const
.Если я объявляю a
как const
, он считает, что type()
является получателем, а не установщиком, поэтому он не может быть левосторонним значением.Вот почему я хочу использовать const_cast
.
Теперь я сделал его скомпилированным без "const_cast" и указателей, как это было предложено в комментариях, но это не удалось "Исключение C ++ с описанием" const vector <...> :: at(позиция): недопустимая позиция «брошено в тестовое тело».Кто-нибудь знает что не так?