инициализация приложения буст-теста - PullRequest
1 голос
/ 05 января 2010

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

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

Был бы также признателен способ запуска некоторого закрытого кода.

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

Ответы [ 2 ]

2 голосов
/ 05 января 2010

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

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

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

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

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

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

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

0 голосов
/ 05 января 2010

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

...