In Mockito possiamo specificare più ritorni come (tratto da here):Come specificare i ritorni consecutivi in 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);
C'è un modo per specificare più ritorni per un finto realizzato con gmock? Attualmente ho:
store_mock_ = std::make_shared<StorageMock>();
ON_CALL(*store_mock_, getFileName(_)).Return("file1").Return("file2");
che non viene compilato perché non riesco a capire più restituzioni in gmock. È possibile con gmock? In caso contrario, c'è un altro modo per risolvere questo problema? Ho scoperto che siamo in grado di EXPECT
più valori di ritorno come:
using ::testing::Return;...
EXPECT_CALL(turtle, GetX())
.WillOnce(Return(100))
.WillOnce(Return(200))
.WillOnce(Return(300));
Tuttavia, non ho trovato alcuna documentazione per il beffardo multipli ritorna con ON_CALL
.
mia comprensione delle aspettative è che sono ciò che ci aspettiamo di essere restituiti, non ciò che dovrebbe essere effettivamente restituito dalla simulazione. È sbagliato? Il tuo esempio di 'IncrementDummy' è davvero utile. Mi piace che il modo migliore per definire i ritorni multipli sia così coinvolto. :( –
Se ti capisco bene - allora sì. Il mio esempio è molto artificiale - non testiamo mai per asserzione cosa restituisce i mock - scrivo questo test per dimostrare che questo meccanismo funziona. Più in generale possiamo dire che EXPECT_CALL'è per casi in cui ci aspettiamo che venga chiamata la funzione fittizia dal codice testato. Non è necessario impostare "valore di ritorno" - ad esempio, è abbastanza frequente che si invochi la chiamata alla funzione void .... – PiotrNycz