En Mockito nous pouvons spécifier plusieurs retours comme (extrait de here):Comment spécifier des retours consécutifs dans gmock?
//you can set different behavior for consecutive method calls.
//Last stubbing (e.g: thenReturn("foo")) determines the behavior of further consecutive calls.
when(mock.someMethod("some arg"))
.thenReturn(new RuntimeException())
.thenReturn("foo");
//There is a shorter way of consecutive stubbing:
when(mock.someMethod()).thenReturn(1,2,3);
when(mock.otherMethod()).thenThrow(exc1, exc2);
est-il un moyen de spécifier plusieurs déclarations pour une maquette faite avec gmock? Actuellement j'ai:
store_mock_ = std::make_shared<StorageMock>();
ON_CALL(*store_mock_, getFileName(_)).Return("file1").Return("file2");
qui ne compile pas parce que je ne peux pas comprendre plusieurs retours dans gmock. Est-ce possible avec gmock? Sinon, existe-t-il un autre moyen de résoudre ce problème? J'ai trouvé que nous pouvons EXPECT
plusieurs valeurs de retour comme:
using ::testing::Return;...
EXPECT_CALL(turtle, GetX())
.WillOnce(Return(100))
.WillOnce(Return(200))
.WillOnce(Return(300));
Cependant, je n'ai pas trouvé de documents pour se moquant des retours multiples avec ON_CALL
.
Ma compréhension des attentes c'est qu'ils sont ce que nous attendons d'être retournés, pas ce qui devrait être retourné par le faux. Est-ce incorrect? Votre exemple 'IncrementDummy' est vraiment utile. Kinda craint que la meilleure façon de définir plusieurs retours soit si impliquée. :( –
Si je vous comprends bien - alors oui, mon exemple est très artificiel - nous ne testons jamais par affirmation ce que les retours de moqueurs - je viens d'écrire ce test pour montrer que ce mécanisme fonctionne.Plus général nous pouvons dire que 'EXPECT_CALL'est pour cas où nous attendons que la fonction simulée soit appelée depuis le code testé Il n'est pas nécessaire de définir "valeur de retour" - par exemple, il est assez fréquent que nous nous attendions à ce que la fonction vide soit appelée .... – PiotrNycz