C++ GMock SetArgReferee как CStringArrayC++

Программы на C++. Форум разработчиков
Anonymous
C++ GMock SetArgReferee как CStringArray

Сообщение Anonymous »

Используя C++11 с MFC и пытаясь создать модульные тесты с помощью gtest 1.7, я столкнулся с проблемой. Я хочу высмеять неприятный метод, не меняя объявления или определения метода ниже:

Код: Выделить всё

virtual bool  getValue(CStringArray& valueOut) const;    // reading from database
Издеваться просто, MOCK_CONST_METHOD1(getValue,bool(CStringArray&)); сделает это за меня. Однако, используя его в тестовом примере, я не могу его скомпилировать.

Соответствующая часть тестового примера:

Код: Выделить всё

CStringArray localArray;
localArray.Add("Only One Element");
EXPECT_CALL(object, getValue(_)).WillOnce(DoAll(
SetArgReferee(localArray),
Return(true)
));
Это приводит к ошибке компиляции, поскольку CStringArray (как производный от CObject) является объектом, который нельзя копировать и перемещать. Мой вопрос:

Как я могу изменить возвращаемый массив, используя только фиктивные функции?
Я знаю, что могу создать гибридный макет с реальной функцией, создающей массив, но мне было бы сложнее добавлять собственные элементы в каждый тестовый пример. Что-то вроде:

Код: Выделить всё

struct MockNastyObject : public NastyObject {
MOCK_CONST_METHOD1(getValueMock, bool(CStringArray&));
virtual bool getValue(CStringArray& arr) const override{
arr.Add("Element1");
getValueMock(arr);
}
};
Этот подход может сработать, поскольку я могу установить ожидание для getValueMock и изменить массив с помощью не-макетного метода.

Подробнее здесь: https://stackoverflow.com/questions/724 ... tringarray

Вернуться в «C++»