Как вы издеваетесь над функцией, которая является частью тестируемого gmock этого класса? - PullRequest
0 голосов
/ 28 февраля 2019

Я использую googletest / googlemock.Я могу проверить приведенный ниже код только тогда, когда Selection естественным образом возвращает false.Как мне смоделировать приведенную ниже примерную проблему?

Мне трудно изменить возвращаемое значение выбора, потому что он использует реальный код.

class frame
{
    bool Selection();
    void Actions();
};

void frame::Action()
{
    if (Selection())
    {
        // do something
    }
    else
    {
        // do something else
    }
}

void WrapAction()
{
    Frame->Action();
}

TEST_F(UITest, ActionWithSelectionTrue)
{
    EXPECT_CALL(*Frame, Selection()).WillOnce(Return(true));

    WrapAction();
}

TEST_F(UITest, ActionWithSelectionFalse)
{
    EXPECT_CALL(*Frame, Selection()).WillOnce(Return(false));
    WrapAction();
}

1 Ответ

0 голосов
/ 28 февраля 2019

Традиционные модульные тесты имеют форму A 3 :

  1. Assemble (также называемый "Arrange"; настройте свой объектпроверяется)
  2. Act (выполнить требуемое действие на объекте)
  3. Assert (проверить правильность измененных значений, события были отправлены,и т. д.)

Это допустимая форма для тестов, которая вообще не требует фальшивых фреймворков.

В тесте с фальшивками вы можете (в зависимости от того, как ваша фиктивная библиотекаработает) должны изменить эту процедуру следующим образом: A 4 :

  1. Assemble (включая введение поддельных зависимостей)
  2. Ожидайте (установите ожидания для ложных зависимостей путем определения ожидаемых вызовов, установки возвращаемых значений, побочных эффектов и т. Д.)
  3. Act
  4. Утвердить (может быть, больше нечего утверждать, если все ожидания ложные охватывают все).

В вашем случае непонятно, что выиздеваютсяГде находятся зависимости, которые вы вводите , которые вы заменяете на макеты?

Учитывая код, который вы нам показали, я думаю, вы должны использовать A 3 тестовый шаблон.Это означает, что в разделе «Сборка» вы настраиваете объект, устанавливая выделение, затем выполняете свое действие над ним и проверяете результат.

Если вы не можете работать в A 3 , это, вероятно, означает, что вам нужно провести рефакторинг для лучшего разделения ваших зависимостей.Когда вы это сделаете, вы можете смоделировать и протестировать с шаблоном A 4 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...