W Mockito możemy określić wiele zwrotów takich jak (zaczerpnięte z here):Jak określić kolejne zwroty w 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);
Czy istnieje sposób, aby określić wiele powroty dla mock wykonana z gmock? Obecnie mam:
store_mock_ = std::make_shared<StorageMock>();
ON_CALL(*store_mock_, getFileName(_)).Return("file1").Return("file2");
które nie skompilować, ponieważ nie mogę dowiedzieć się kilku zwrotów w gmock. Czy to możliwe w przypadku gmock? Jeśli nie, czy istnieje inny sposób rozwiązania tego problemu? Odkryłam, że możemy EXPECT
wiele wartości powrotne lubię:
using ::testing::Return;...
EXPECT_CALL(turtle, GetX())
.WillOnce(Return(100))
.WillOnce(Return(200))
.WillOnce(Return(300));
Jednak nie znaleziono żadnych docs dla wyśmianie wiele zwrotów z ON_CALL
.
Moje zrozumienie oczekiwań jest tym, czego oczekujemy, że zostaną zwróceni, a nie tym, co faktycznie powinno zostać zwrócone przez próbę. Czy to jest nieprawidłowe? Twój przykład "IncrementDummy" jest naprawdę pomocny. Kinda ssie, że najlepszy sposób definiowania wielu zwrotów jest tak zaangażowany. :( –
Jeśli rozumiem cię poprawnie - to tak, mój przykład jest bardzo sztuczny - nigdy nie testujemy twierdzeniem, co mity powraca - po prostu piszę ten test, aby pokazać, że ten mechanizm działa. Bardziej ogólne możemy powiedzieć, że 'EXPECT_CALL'jest dla przypadki, w których oczekuje się, że wyszydzona funkcja zostanie wywołana z poziomu testowanego kodu, nie jest konieczne ustawienie "wartości zwracanej" - np. często jest tak, że oczekujemy wywołania funkcji pustej. – PiotrNycz