2012-03-07 2 views
3

메서드 호출에 Gmock을 사용하여 out 매개 변수로 QList heightsFromCsvResult 요소를 반환합니다.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)에 대한 색인은 : 여기에서 현재 작동 코드이다. mockLineNumber이 Gmock에 의해 작성되지 않습니다 때문에,

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

하지만이 코드는 작동하지 않습니다

는 지금은 더 일반적인 방법으로 Gmock를 사용하려고합니다. 그러나 EXPECT_CALL이 만족됩니다.

누구나 코드에서 문제를 볼 수 있습니까? 같은 EXPECT_CALLSaveArg의 변수 세트를 사용하여

답변

4

작동하지 않는 것, 당신이 대신 할 수있는 것은 인덱스로 인수 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을 필요로하지 않는 한 다른 사람이 그 부분을 제거 할 수 있습니다.