Как написать тест gmock, чтобы он не вызывал конструктор класса фикстуры - PullRequest
0 голосов
/ 10 апреля 2020

Я хотел бы знать, могу ли я в любом случае написать модульный тест gmock на C ++, который не вызывает конструктор существующего класса фикстур.

У меня такой вопрос: c для существующего кода Сначала я подведу итог, как структурирован существующий код.

В файле C ++ все существующие модульные тесты используют фикстуру. Конструктор этого прибора собирает конфигурацию, необходимую для выполнения всех этих модульных тестов.

Код в этом файле выглядит примерно так.

class TestHandlerFixture : public HandlerFixture
{
public:
    TestHandlerFixture()
    {
        // Lot of code here including below call
        HandlerImplemantaion::create_link(Arg1);
    }
    ~TestHandlerFixture()
    {
        // Code to clean up
    }
}


BOOST_FIXTURE_TEST_SUITE(TestHandler, TestHandlerFixture);

BOOST_AUTO_TEST_CASE(test_one)
{

}

BOOST_AUTO_TEST_CASE(test_two)
{

}

// Lot more unit tests

BOOST_AUTO_TEST_SUITE_END();

Я изменил код, который вызывается create_link ( ) и, следовательно, я хочу добавить новый модульный тест для проверки нового кода. Новый код, который я добавил, является ошибкой и не применим к обычному потоку create_link (). В новом тесте я хочу сначала установить условие ошибки, а затем подтвердить использование EXPECT_CALL (...) при вызове create_link (). Любая идея, как сделать это, не затрагивая существующие тестовые случаи или существенно изменив существующие модульные тесты?

Так как create_link () вызывается внутри конструктора и, следовательно, он выполняется для каждого теста, я не думаю, что смогу установить условие ошибки внутри конструктора, так как оно повлияет на все существующие тесты. Я могу удалить вызов create_link () из конструктора, а затем явно вызывать его в каждом модульном тесте, но для этого нужно вносить изменения во многих местах. Я хотел бы знать, есть ли другой способ, которым я могу написать модульное тестирование, не оказывая существенного влияния на существующие тесты. Есть ли способ написать модульный тест, который не вызывает конструктор класса TestHandlerFixture?

Моя идея о новом модульном тесте примерно такая:

BOOST_AUTO_TEST_CASE(test_create_link_error)
{
    // Code here to set error condition
    EXPECT_CALL(...); // This check for error when create_link() is called.
    create_link(Arg1);
}

Приведенный выше код не работать, так как сначала вызывается конструктор TestHandlerFixture () и, следовательно, он вызывает create_link (). Спасибо.

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