Как добиться организации тестовых наборов и кейсов с Boost? - PullRequest
6 голосов
/ 16 февраля 2012

Предисловие

Я новичок в модульном тестировании и довольно плохо знаком с C ++.Недавно у меня был некоторый опыт разработки на Ruby с использованием RSpec.Теперь я пытаюсь получить аналогичную работу в C ++ с модулем модульного тестирования Boost.

Сценарий

Я организую мои заголовочные и исходные файлы приложения в каталоге /src в каталоге проекта.Корневая папка.Как я уже неоднократно видел в других программах на C ++, наличие тестов в каталоге /tests в корневом каталоге проекта кажется разумным.

Теперь я хочу скопировать структуру каталогов исходных файлов какхорошо в тестах.Таким образом, предположим, что у меня есть следующая структура файла источника / заголовка:

/src
  /controller
    controller_class.h
    controller_class.cpp
  /model
    model_a.h
    model_a.cpp
    model_b.h
    model_b.cpp
  /view
    simple_view.h
    simple_view.cpp

И поэтому тесты организованы следующим образом

/tests
  TestRunner.cpp
  /controller
    controller_class_test.cpp
  /model
    model_a_test.cpp
    model_b_test.cpp
  /view
    simple_view_test.cpp

Для TestRunner.cpp я взял примериз этого сообщения в блоге :

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE "MyProgram Unit Tests"
#include <boost/test/unit_test.hpp>

Задача

Теперь я подумал продолжить в TestRunner.cpp создание базовых тестовых наборов (для контроллера, модели иview) следующим образом

BOOST_AUTO_TEST_SUITE ( controller )
  //some stuff here
BOOST_AUTO_TEST_SUITE_END()

BOOST_AUTO_TEST_SUITE ( model )
  //some stuff here
BOOST_AUTO_TEST_SUITE_END()

BOOST_AUTO_TEST_SUITE ( view )
  //some stuff here
BOOST_AUTO_TEST_SUITE_END()

Desire

Но как теперь я могу интегрировать дополнительные вложенные наборы тестов и кейсы в эти тестовые наборы верхнего уровня?Наконец, я хочу, чтобы фактические тестовые случаи отображались только в файлах *_test.cpp.В то время как каждый из этих файлов объединяет тестовые наборы в один дополнительный набор тестов:

  • Основной тестовый модуль (TestRunner.cpp)
    • Контроллерный тестовый набор (TestRunner.cpp)
      • Набор тестов класса контроллера (controller_class_test.cpp)
        • Примеры тестов класса контроллера (controller_class_test.cpp)
    • Набор тестов модели (TestRunner.cpp)
      • Набор тестов для модели A (model_a_test.cpp)
        • Тестовые наборы для модели A (model_a_test.cpp)
      • Набор тестов для модели B (model_b_test.cpp)
        • Контрольные примеры для модели B (model_B_test.cpp)
    • Просмотреть набор тестов (TestRunner.cpp)
      • Simple View Test Suite (simple_view_test.cpp)
        • Тестовые случаи Simple View (simple_view_test.cpp)

Вопрос

Как мне включить вложенные костюмы и кейсы в соответствующий набор более высокого уровня?Я ничего не смог найти в документации Boost, хотя Модуль модульных тестов> Руководство пользователя> Организация тестирования> Набор тестов> Автоматическая регистрация подошел довольно близко.
В Ruby с RSpec нужно просто поместитьтестовые файлы (читай: *_spec.rb), как я это делал, и их автоматическая итерация по ним.Я предполагаю, что с Boost я должен явно объявить это таким образом.

1 Ответ

7 голосов
/ 17 февраля 2012

Наборы тестов Boost.Test похожи на пространства имен C ++. Вы можете перезапустить их в любое время. Каждый из ваших тестовых файлов просто должен поместить тестовые наборы в правильные тестовые наборы:

controller_class_a_test.cpp:

 BOOST_AUTO_TEST_SUITE( controller )

 BOOST_AUTO_TEST_CASE( test_class_a )
 {
 }

 BOOST_AUTO_TEST_SUITE_END()


controller_class_b_test.cpp:

 BOOST_AUTO_TEST_SUITE( controller )

 BOOST_AUTO_TEST_CASE( test_class_b )
 {
 }

 BOOST_AUTO_TEST_SUITE_END()

Та же концепция применима к дереву тестов любой глубины. Также вам совсем не нужен тестовый уровень TestRunner.cpp. Просто объедините все свои тестовые файлы в один тестовый модуль, а Boost.Test позаботится обо всем остальном.

...