Google Test / Mock test не пройден, если ожидаемый вызов переполнен - PullRequest
1 голос
/ 28 ноября 2011

Как сделать так, чтобы тест Google провалился, если метод гугла Google был вызван чаще, чем ожидалось?

Вот пример:

class MockIO : iIO
{
    MOCK_METHOD1(IO_Read, void (uint8_t));
};

TEST(case, test)
{
    MockIO io;
    EXPECT_CALL(io, IO_Read(0x01)).Times(10);
    for (i=0; i<20; i++)
        io.IO_Read(0x01);
}

Как я понимаю, я должен попробовать

EXPECT_CALL(io, IO_Read(0x01)).Times(10).Throw(exception);

Но во встроенных проектах исключения не используются.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 21 марта 2012

Я думаю, что вы должны использовать строгие макеты для вашего теста.

TEST(case, test){
StrictMock<MockIO> io;
EXPECT_CALL(io, IO_Read(0x01)).Times(10);

При использовании Strictmock непредвиденные вызовы вызывают сбой теста.

http://code.google.com/p/googlemock/wiki/CookBook#Nice_Mocks_and_Strict_Mocks

1 голос
/ 28 ноября 2011

Но во встроенных проектах исключения не используются.

Это не имеет значения, потому что вы должны создавать не свой модульный тест для запуска на встроенной платформе, а для своего ПК.

Установка ожиданий может быть сведена к этому:

EXPECT_CALL(io, IO_Read(0x01)).Times( AtLeast( 10 ) );

Невыполнение условия приведет к возникновению исключения.

Чтобы включить библиотеку googlemock для создания исключений при сбое ожидания:

::testing::GTEST_FLAG(throw_on_failure) = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...