Google Mock – как мне вернуть другое значение, используя EXPECT_CALL для выхода из циклаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Google Mock – как мне вернуть другое значение, используя EXPECT_CALL для выхода из цикла

Сообщение Anonymous »

Как с помощью 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));
Описание теста

Тестируемый код использует слово состояния, чтобы определить, цикл чтения данных должен завершиться. 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);
}
Метод Read является издевательством.

Если я добавляю ожидания по порядку, используется последний 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 для более сложных и/или более длинных последовательностей данных?

Подробнее здесь: https://stackoverflow.com/questions/559 ... xit-a-loop
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение