2012-03-07 5 views
3

Я использую Gmock для вызова метода, который возвращает элемент значения QList heightsFromCsvResult как параметр out. Здесь в настоящее время работает код:Параметр метода метода для действия в googlemock

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 удовлетворен.

У кого-нибудь есть проблемы с кодом? не похоже, работает

ответ

4

Используя набор переменных с 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 что-то еще можно удалить эту часть.

Смежные вопросы