С помощью Google Mock, как мне указать EXPECT_CALL с возвращаемым значением N раз, а затем другим значением N + 1?
Единственный способ пройти тест - это указать вручную каждую итерацию, например:
EXPECT_CALL(mock, Read(address)).Times(5)
.WillOnce(Return(0))
.WillOnce(Return(0))
.WillOnce(Return(0))
.WillOnce(Return(0))
.WillOnce(Return(1));
Описание теста
Код подtest использует слово состояния, чтобы определить, следует ли завершить чтение данных цикла.EXPECT_CALL должен установить ожидание возврата 1 из проверенного метода Read () N раз, а в N-м цикле - 0, чтобы указать, что больше нет данных.
К сожалению, рассматриваемый код находится на отдельной машине, но вот типичный пример.
const unsigned int statusAddress = 0;
const unsigned int dataAddress = 1;
const unsigned int maxData = 8;
unsigned int dataBuffer[maxData] = {0};
int readIndex = 0;
// Check if data is available (read returns 1).
unsigned int dataIsAvailable = Read(statusAddress);
// Keep reading data until no more is available or the buffer is full.
while ((dataIsAvailable == 1) && (readIndex < maxData))
{
// Read data word.
dataBuffer[readIndex++] = Read(dataAddress);
// Read status to determine if more data is available.
dataIsAvailable = Read(statusAddress);
}
Метод чтения является ложным.
Если я добавляю ожидания по порядку,последний EXPECT_CALL используется (я предполагаю, что WillOnce перезаписывает WillRepeatedly в коде Google).Очевидно, я неправильно понимаю, как упорядочено несколько EXPECT_CALL.
EXPECT_CALL(mock, Read(address)).Times(4).WillRepeatedly(Return(1));
EXPECT_CALL(mock, Read(address)).Times(1).WillOnce(Return(0));
Expected: to be called 4 times
Actual: never called - unsatisfied and active
Поскольку нет никакого метода ...
WillN(Return(1), 4)
... Я предполагаю, что есть менее фиксированный способструктурирование EXPECT_CALL для более сложных и / или более длинных последовательностей данных?