Я хотел бы знать, могу ли я в любом случае написать модульный тест 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 (). Спасибо.