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膰.

Zobacz r贸wnie偶