Google Mock: ON_CALL
+ EXPECT_CALL
Kr贸tki wpis o tym jak ON_CALL
i EXPECT_CALL
mog膮 si臋 uzupe艂nia膰. Warto pami臋ta膰, 偶e EXPECT_CALL
nie “nadpisuje” zachowa艅 zdefiniowanych przez ON_CALL
. Oba te makra mo偶na stosowa膰 jednocze艣nie na tym samym mocku.
ON_CALL - definiuje domy艣ln膮 akcj臋 dla mockowanej funkcji, np.
ON_CALL(myMock, myMethod(1)).WillByDefault(Return(11));
ON_CALL
-e mog膮 si臋 nadpisywa膰. Dopasowany zostanie zawsze ten, kt贸ry zosta艂 zdefiniowany jako ostatni. Przyk艂adowo:
ON_CALL(myMock, myMethod(_)).WillByDefault(Return(999));
ON_CALL(myMock, myMethod(1)).WillByDefault(Return(111));
myMock.myMethod(1); // 111
myMock.myMethod(2); // 999
ON_CALL(myMock, myMethod(_)).WillByDefault(Return(123));
myMock.MyMethod(1); // 123
Powy偶ej u偶yty zosta艂 symbol zast臋pczy _
, kt贸ry oznacza dowolny argument. Mo偶liwe jest r贸wnie偶 u偶ycie samej nazwy funkcji, aby zdefiniowa膰 domy艣ln膮 akcj臋 dla wszystkich jej wywo艂a艅:
ON_CALL(myMock, myMethod).WillByDefault(Return(999));
Taka notacja zadzia艂a pod warunkiem, 偶e nazwa funkcji myMethod
nie jest prze艂adowana.
EXPECT_CALL - definiuje asercj臋, kt贸ra musi zosta膰 spe艂niona, aby test przeszed艂, np.
EXPECT_CALL(myMock, myMethod(4)).WillRepeatedly(Return(44));
Powy偶ej zdefiniowano asercj臋, 偶e funkcja myMethod
musi zosta膰 wywo艂ana z argumentem 4
i je艣li tak si臋 stanie, to zwr贸膰 44
.
艁膮czenie ON_CALL
i EXPECT_CALL
Oba te makra mog膮 si臋 ca艂kiem dobrze uzupe艂nia膰.
ON_CALL(myMock, myMethod(_)).WillByDefault(Return(999));
ON_CALL(myMock, myMethod(1)).WillByDefault(Return(111));
EXPECT_CALL(myMock, myMethod(1));
EXPECT_CALL(myMock, myMethod(2));
myMock.myMethod(1); // 111
myMock.myMethod(2); // 999
Mo偶na w ten spos贸b oddzieli膰 asercje od akcji podejmowanych przez mocki. Nie zawsze ma to sens, ale warto pami臋ta膰, 偶e tak mo偶na robi膰.