Pase parámetro de método para una acción en googlemock

Yo uso Gmock para una llamada de método que devuelve un elemento de la QList heightsFromCsvResult como parámetro de salida. Aquí es actualmente el código de trabajo:

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)));

El primer parámetro lineNumber de

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

es el índice de heightsFromCsvResult.en(lineNumber).

Ahora intento usar Gmock de un modo más genérico:

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

Pero este código no funciona, porque mockLineNumber nunca es escrito por Gmock. Pero el EXPECT_CALL está satisfecho.

¿Alguien ve el problema en el código?

InformationsquelleAutor Jens Ehrlich | 2012-03-07

1 Kommentar

  1. 4

    El uso de un conjunto de variables con SaveArg dentro de la misma EXPECT_CALL no parece estar funcionando, lo que podría hacer en su lugar es ir a través de un acción personalizada que establece el segundo argumento usando el argumento 0 como índice en el pasado contenedor.

    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)));

    A menos que usted necesita mockLineNumber para algo más que podría eliminar esa parte.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea