Есть ликакое действие в EXPECT_CALL в Gmock? - PullRequest
0 голосов
/ 20 ноября 2018

SUT вызывает внешнюю библиотеку, для которой определен EXPECT_CALL.Я хочу сделать что-то только тогда, когда функция вызывается в первый раз, и игнорировать выполнение чего-либо в другой раз (но убедитесь, что она вызывается дважды);и наоборот .. т.е. ничего не делать в первый раз, когда он вызывается, и что-то во второй раз, когда он вызывается.

// Code for the Expect Call  
EXPECT_CALL(*mock_ptr, some-function(_,_)) .Times(2) .WillOnce(action1)
.WillOnce(do-nothing);

// SUT call
ASSERT_NO_THROW(sut_function(arg1, arg2));

Игнорируя второй (бездействующий) WillOnce, я получаю предупреждение Gmock, например:

ПРЕДУПРЕЖДЕНИЕ GMOCK: test_blah-blah.cpp: 321: слишком мало действий, указанных в EXPECT_CALL (* mock_ptr, some-function (, )) ... Ожидается, что будет вызвандважды, но имеет только 1 WillOnce ().ПРЕДУПРЕЖДЕНИЕ GMOCK: test_blah-blah.cpp: 321: Действия завершены в EXPECT_CALL (* mock_ptr, some-function (, )) ... Вызывается 2 раза, но указывается только 1 WillOnce () - возвратнапрямую.

Какое действие я должен выполнить в части «ничего не делать», чтобы не получить это предупреждение?some-function - это функция, возвращающая пустоту.

Спасибо!

1 Ответ

0 голосов
/ 20 ноября 2018
// Code for the Expect Call  
EXPECT_CALL(*mock_ptr, some-function(_,_)) .Times(2) .WillOnce(action1)
.WillOnce(Return());

// SUT call
ASSERT_NO_THROW(sut_function(arg1, arg2));

Добавление Return () для второго (или первого). Будет решена проблема.Обратитесь к шпаргалке в github, чтобы найти соответствующее действие.

...