2011-04-21 8 views
6

Considere el caso en el que se espera que se invoque una determinada función simulada varias veces, cada vez con un valor diferente en un parámetro determinado. Me gustaría validar que la función fue llamada una vez y solo una vez por valor en una cierta lista de valores (por ejemplo, 1,2,5).Google Mock: múltiples expectativas en la misma función con diferentes parámetros

Por otro lado, me gustaría abstenerme de definir una secuencia, ya que eso dictaría un cierto orden, que es un detalle de implementación que me gustaría mantener libre.

¿Hay algún tipo de matcher u otra solución para este caso?

No estoy seguro de si esto influye en la solución de alguna manera, pero tengo la intención de utilizar WillOnce (Return (x)) con una x diferente por valor en la lista anterior.

Respuesta

10

De forma predeterminada, las expectativas de gMock pueden cumplirse en cualquier orden (precisamente por el motivo que usted menciona, para no especificar demasiado sus pruebas).

En su caso, lo que desea es algo así como:

EXPECT_CALL(foo, DoThis(1)); 
EXPECT_CALL(foo, DoThis(2)); 
EXPECT_CALL(foo, DoThis(5)); 

Y algo como:

foo.DoThis(5); 
foo.DoThis(1); 
foo.DoThis(2); 

satisfaría las expectativas.

(Aparte: Si qué desea limitar la orden, usted debe utilizar InSequence: https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#expecting-ordered-calls)

+0

Debo haber estado escalonado al escribir esa pregunta. Lo dejaré publicado para todos los demás programadores por niveles :) – Jonathan

+0

¿No puede el EXPECT_CALL ser más compacto? Algo como: EXPECT_CALL (foo, DoThis (Args <1, 2, 5>)); ? – xwl

0

Si esperas una función, DoThing, que se llamará con muchos parámetros diferentes, puede utilizar el siguiente patrón:

for (auto const param : {1, 2, 3, 7, -1, 2}{ 
    EXPECT_CALL(foo, DoThing(param)); 
} 

Esto es particularmente útil si su EXPECT_CALL incluye muchos parámetros, de los cuales sólo uno está cambiando, o si su EXPECT_CALL incluye muchas Action s que se repita.

Cuestiones relacionadas