инициализация приложения для буст-теста

Я просто получаю информацию о повышении и модульном тестировании в целом с новым приложением, и я не уверен, как обрабатывать инициализацию приложений (например, загружать файлы конфигурации, подключаться к базе данных, запускать встроенный интерпретатор Python и т. д.) .

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

Также приветствуется какой-либо способ запуска кода выключения.

Как мне это сделать?


person Fire Lancer    schedule 05.01.2010    source источник


Ответы (2)


Кажется, что вы намерены сделать больше интеграционного теста, чем модульного теста. Это не точное определение формулировки, но это имеет значение. Модульное тестирование означает тестирование методов изолировано, в среде, называемой фикстурой, созданной только для одного теста, завершенной, а затем удаленной. Другой экземпляр прибора будет создан заново, если в следующем случае потребуется такой же прибор. Это делается для того, чтобы изолировать тесты, чтобы ошибка в одном тесте не влияла на результат последующих тестов.

Обычно один тест состоит из трех шагов:

  • Организуйте - подготовьте приспособление: создайте экземпляр класса для тестирования, возможно, другие необходимые объекты
  • Act - вызвать метод для тестирования
  • Утвердить - проверить ожидания

Модульные тесты обычно не используют внешние ресурсы, такие как файлы и базы данных. Вместо этого фиктивные объекты используются для удовлетворения зависимостей тестируемого класса.

Однако, в зависимости от типа вашего приложения, вы можете попробовать запустить тесты из самого приложения. Это не «чистое» модульное тестирование, но в любом случае оно может быть ценным, особенно если код не был написан с учетом модульного тестирования, он может быть недостаточно «гибким» для модульного тестирования.

Для этого требуется специальный режим выполнения, например, с параметром «-test», который обычно инициализирует приложение, а затем вызывает тесты, которые будут имитировать входные данные и использовать утверждения для проверки того, что приложение отреагировало должным образом. Аналогичным образом можно вызвать код выключения и проверить с помощью утверждений, закрыто ли соединение с базой данных (если объекты не удалены).

У этого подхода есть несколько недостатков по сравнению с юнит-тестами: он зависит от конфиг-файлов (программа может вести себя по-разному в зависимости от параметров), от базы данных (от ее содержимого и от возможности подключения к ней), тесты не изолированы ... Первые две проблемы можно преодолеть, используя значения по умолчанию для конфигурации и подключение к тестовой базе данных в тестовом режиме.

person philant    schedule 05.01.2010

Вы определяете BOOST_TEST_MAIN? Если это так, и у вас нет собственной функции main (куда вы в противном случае поместили бы код инициализации), вы могли бы использовать некоторую форму одноэлементного объекта, который предоставляет функцию инициализации, которую вы можете вызывать перед каждым тестом, если это необходимо.

person Rob    schedule 05.01.2010