Передать параметр метода действию в googlemock

Я использую Gmock для вызова метода, который возвращает элемент высоты QListFromCsvResult в качестве выходного параметра. Вот текущий рабочий код:

EXPECT_CALL(*_mockAttributeRepository, getGeometryHeightValues(_,_))
    .WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(0)), Return(true)))
    .WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(1)), Return(true)))
    .WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(2)), Return(true)))
    .WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(3)), Return(true)));

Первый параметр lineNumber из

getGeometryHeightValues(int lineNumber, QPair<QString, QString>) 

является индексом для heightsFromCsvResult.at(lineNumber).

Теперь я пытаюсь использовать Gmock более общим способом:

int* mockLineNumber = new int;
EXPECT_CALL(*_mockAttributeRepository, getGeometryHeightValues(_,_))
   .Times(4)
   .WillRepeatedly(DoAll(SaveArg<0>(mockLineNumber), SetArgReferee<1>(heightsFromCsvResult.at(*(mockLineNumber))), Return(true)));

Но этот код не работает, потому что mockLineNumber никогда не пишется Gmock. Но EXPECT_CALL удовлетворен.

Кто-нибудь видит проблему в коде?


person Jens Ehrlich    schedule 07.03.2012    source источник


Ответы (1)


Использование набора переменных с SaveArg в одном и том же EXPECT_CALL не работает, вместо этого вы можете выполнить настраиваемое действие. который устанавливает второй аргумент, используя аргумент 0 в качестве индекса для переданного контейнера.

ACTION_P(SetArg1WithValueFromPassedArgumentUsingArg0AsIndex, param)
{
  arg1 = param.at(arg0);
} 

int* mockLineNumber = new int;
EXPECT_CALL(*_mockAttributeRepository, getGeometryHeightValues(_,_))
   .Times(4)
   .WillRepeatedly(DoAll(SaveArg<0>(mockLineNumber), SetArg1WithValueFromPassedArgumentUsingArg0AsIndex(heightsFromCsvResult), Return(true)));

Если вам не нужен mockLineNumber для чего-то другого, вы можете удалить эту часть.

person Kristofer    schedule 07.03.2012